android - 具有自定义行布局的多项选择警报对话框

标签 android adapter android-alertdialog multiple-choice

我需要创建一个包含多个选项的 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();
                    }
                });

问题是在创建多选列表时,setMultiChoiceItems 没有接受 ListAdapter 作为参数的构造函数。

我需要为每一行设置自定义布局,因为我使用可绘制选择器来设置行背景和文本颜色。

有什么想法吗?

附言。此处是 AlertDialog 源代码以获取更多信息。 https://android.googlesource.com/platform/frameworks/base.git/+/android-4.2.2_r1/core/java/android/app/AlertDialog.java

最佳答案

好吧,我知道我应该创建一个自定义对话框,但现在我没有时间去做......所以我就是这样解决这个问题的:

        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,我从对话框中获取 ListView 对象,然后自己配置它。

关于android - 具有自定义行布局的多项选择警报对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19281945/

相关文章:

android - 从 Android 应用分享视频

c# - 如何将适配器模式应用于集合?

java - ListView 项目中的按钮

design-patterns - 适配器模式与 Liskov 替换

android-如何更改警报对话框项目的重力

java - 应用程序运行良好,那么我可以忽略 "CursorWindow: Window is full: requested allocation 12 bytes, free space 4 bytes, window size 2,097,152 bytes"吗?

android - 如何获得3.0版以下Android设备上的实时流音频?

Java HttpClient 改变内容类型?

android - 通过 IntentService 显示对话框?

android - 警报对话框背景色