11

複数選択オプションを使用して AlertDialog を作成しようとしています。で試してみましたsetMultiChoiceItemsが、持っているのは ではArrayList<Category>なくCharSequence、アダプターで試しました。

問題setAdapterは、1 つの項目を選択するとダイアログ ウィンドウが閉じてしまうことです。そして、私が望むのは、アイテムを選択してから[OK]ボタンを押して、どのアイテムが選択されたかを確認することです。

AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Pick a color");
        ArrayAdapter<Category> catsAdapter = new ArrayAdapter<Category>(this, android.R.layout.select_dialog_multichoice,this.categories);
        builder.setAdapter(catsAdapter, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {

            }
        });
        builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
               @Override
               public void onClick(DialogInterface dialog, int which) {
                //do something  
               }                
        });;

        AlertDialog alert = builder.create();
        alert.show();
4

3 に答える 3

33

残念ながら、 を呼び出さずに AlertDialog のマルチチョイス モードをオンにする簡単な方法はないようですsetMultiChoiceItems()

ただし、アダプターを設定してから、含まれている自体でマルチチョイス モードをオンにすることができますListView

final AlertDialog dialog = new AlertDialog.Builder(getActivity())
    .setTitle("Title")
    .setAdapter(yourAdapter, null)
    .setPositiveButton(getResources().getString(R.string.positive), null)
    .setNegativeButton(getResources().getString(android.R.string.cancel), null)
    .create();

dialog.getListView().setItemsCanFocus(false);
dialog.getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
dialog.getListView().setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
        // Manage selected items here
        System.out.println("clicked" + position);
        CheckedTextView textView = (CheckedTextView) view;
        if(textView.isChecked()) {

        } else {

        }
    }
});

dialog.show();
于 2013-07-28T10:40:37.517 に答える
1

これにより、一度選択した後にダイアログが消えるのを防ぎます。

AlertDialog alertDialog = builder.create();
ListView listView = alertDialog.getListView();
listView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
        // TODO Auto-generated method stub

    }
});

どの項目が選択されているかを取得するには、それに応じてアダプターを計画する必要があります。

于 2013-06-04T05:22:45.170 に答える
0

以下のコードを参照してください。私は自分のアプリでこれを使用しました。

public static ArrayList<String> Party_list_new = new ArrayList<String>();

ArrayList<String> party_multi_cheked = new ArrayList<String>();

public void show_alert() {

        final Dialog dia = new Dialog(this);
        dia.setContentView(R.layout.alert_);
        dia.setTitle("Select File to import");
        dia.setCancelable(true);

        final ListView list_alert = (ListView) dia
                .findViewById(R.id.alert_list);

        list_alert.setAdapter(new ArrayAdapter<String>(getApplicationContext(),
                android.R.layout.simple_list_item_multiple_choice,
                Party_list_new));

        list_alert.setItemsCanFocus(false);
        list_alert.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        list_alert.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> arg0, View arg1, int pos,
                    long arg3) {

            }
        });

        Button btn = (Button) dia.findViewById(R.id.button1);
        btn.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {

                SparseBooleanArray positions = list_alert
                        .getCheckedItemPositions();
                int j = 0;

                for (int k = 0; k < Party_list_new.size(); k++) {
                    if (positions.get(k)) {

                        party_multi_cheked.add("" + k);


                    }
                }

                dia.dismiss();
            }
        });
        dia.show();

    }

alert_list.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
         <Button
            android:id="@+id/button1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Select Party" />

        <ListView
            android:id="@+id/alert_list"
            android:layout_width="match_parent" android:padding="5dp"
            android:layout_height="wrap_content" >
        </ListView>

    </LinearLayout>

正しければ正す。

于 2012-06-07T14:12:41.967 に答える