3

複数選択項目を含む AlertDialog を作成する必要がありますが、カスタム レイアウト ファイルを内部 ListView に設定しようとすると問題が発生します。

単一選択項目の場合、ListAdapter をパラメーターとして受け取るコンストラクターを使用します。このようにして、各行に適切なレイアウト リソースを設定できます。

        builder.setSingleChoiceItems(new ArrayAdapter<String>(getActivity(),
                R.layout.list_item_single_choice_answer, items), checkedItem,
                new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        checkedItem = which;
                        toggleEditTextAnswer(checkedItem == (items.length - 1));
                        dialog.dismiss();
                    }
                });

問題は、複数選択リストを作成するときに ListAdapter をパラメーターとして受け入れるsetMultiChoiceItemsのコンストラクターがないことです。

行の背景とテキストの色を設定するためにドローアブル セレクターを使用するため、行ごとにカスタム レイアウトを設定する必要があります。

何か案は?

PS。詳細については、AlertDialog のソース コードを参照してください。 https://android.googlesource.com/platform/frameworks/base.git/+/android-4.2.2_r1/core/java/android/app/AlertDialog.java

4

2 に答える 2

5

カスタム ダイアログを作成する必要があることはわかっていますが、今はそれを行う時間がありません。

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        // Set the adapter
        builder.setAdapter(
                new ArrayAdapter<String>(getActivity(),
                        R.layout.list_item_multiple_choice_answer, items), null)
        // Set the action buttons
                .setPositiveButton(android.R.string.ok,
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int id) {
                                dialog.dismiss();
                            }
                        });

        AlertDialog alertDialog = builder.create();

        ListView listView = alertDialog.getListView();
        listView.setAdapter(new ArrayAdapter<String>(getActivity(),
                R.layout.list_item_multiple_choice_answer, items));
        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                CheckedTextView checkedTextView = (CheckedTextView) view;
                checkedItems[position] = !checkedTextView.isChecked();
            }
        });
        listView.setDivider(null);
        listView.setDividerHeight(-1);

        alertDialog.setOnShowListener(new DialogInterface.OnShowListener() {

            @Override
            public void onShow(DialogInterface dialog) {
                setCheckedItems(((AlertDialog) dialog).getListView());
            }
        });

        alertDialog.show();

まず、アイテムを使用してアダプターを設定し、setMultiChoiceItems を呼び出す代わりに、Dialog から ListView オブジェクトを取得して、それを自分で構成します。

于 2013-10-10T18:04:14.953 に答える