Android 複数選択のチェックリストのダイアログを作る

Android

Android 複数選択のチェックリストのダイアログを作る

意外と日本語情報がなかったので、書いておきます。
下記のようなダイアログを作ります。

;

     public class DaySelectDialogFragment extends DialogFragment {
 
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            mSelectedItems = new ArrayList(); // Where we track the selected
                                              // items
            boolean[] selected_days = new boolean[7];
            selected_days[0] = true; //最初からチェックしておきたい項目をtrueにする
            
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            // Set the dialog title
            builder.setTitle(R.string.day_of_week)
                    // Specify the list array, the items to be selected by
                    // default (null for none),
                    // and the listener through which to receive callbacks when
                    // items are selected
            
                    .setMultiChoiceItems(R.array.dayOfWeeklist, selected_days,
                            new DialogInterface.OnMultiChoiceClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which,
                                        boolean isChecked) {
                                    if (isChecked) {
                                        // If the user checked the item, add it
                                        // to the selected items
                                        mSelectedItems.add(which);
                                    } else if (mSelectedItems.contains(which)) {
                                        // Else, if the item is already in the
                                        // array, remove it
                                        mSelectedItems.remove(Integer.valueOf(which));
                                    }
                                }
                            })
                    // Set the action buttons
                    .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int id) {
                            // User clicked OK, so save the mSelectedItems
                            // results somewhere
                            // or return them to the component that opened the
                            // dialog
                            //mSelectedItems = [0, 1, 2]
                            String type = "ON";
                            PutUtils.putAlarmDay(context, type, mSelectedItems);
                        }
                    })
                    .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int id) {
 
                        }
                    });
 
            return builder.create();
        }
    }

OKをタップで

 mSelectedItems   

に選択した項目が、[0,1,2]という形で入ります。
んで、たとえばボタンをタップで上記のダイアログが開くようにします。

    @Override
    public void onClick(View v) {
        Intent i;
        switch (v.getId()) {
             
            case R.id.day_of_week:
                DaySelectDialogFragment day_select_dialog = new  DaySelectDialogFragment();
 
                day_select_dialog.show(m_fm_manager, TAG);
 
        }

忘れずに、onCreateでFragmentManagerを作っておきます。

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.setting_alarm);
 
        btnAutoDay = (Button) findViewById(R.id.day_of_week);
        btnAutoDay.setOnClickListener(this);
 
        context = this;
 
        m_fm_manager = getSupportFragmentManager();
    }

下記のようなエラーが出てしまう場合は

 The method getSupportFragmentManager() is undefined for the type SampleActivity

ActivityがFragmentActivityを継承しているか確認しましょう。

一番最初のDialogFragmentは、ほぼ下記のページのコピペです。

http://developer.android.com/guide/topics/ui/dialogs.html

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です