1

出于某种原因,无论我更改什么,我都无法摆脱ListView. 您可以在“第 3 项”下看到它。

入围名单

即使我有一个很长的列表,即使我一路下拉,也会发生这种情况。

长名单

我在布局中尝试了match_parentwrap_content的所有组合,但没有成功。这是我的 XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    >

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
</LinearLayout>

这是我的AlertDialog

private void openMultiItemAlertDialog() {
    ArrayList<String> selectedItems = new ArrayList<String>();
    ArrayList<CharSequence> itemsList = new ArrayList<CharSequence>();
    itemsList.add("item 1");
    itemsList.add("item 2");
    itemsList.add("item 3");
    itemsList.add("item 4");
    itemsList.add("item 5");
    itemsList.add("item 6");
    itemsList.add("item 7");
    itemsList.add("item 8");
    itemsList.add("item 9");

    final CharSequence[] finalItemsList = itemsList.toArray(
            new CharSequence[itemsList.size()]);

    boolean[] booleanPrimativeArray = new boolean[finalItemsList.length];
    checkedItems = new boolean[finalItemsList.length];
    selectedItems.clear();


    final View view = inflater.inflate(R.layout.dialog_list, null);
    AlertDialog.Builder dialog = new AlertDialog.Builder(this);
    dialog.setTitle(R.string.dialog_title)
        .setView(view)
        .setCancelable(true)
        .setNegativeButton(R.string.dialog_cancel, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                dialogMultiItem = null;
            }
        })
        .setMultiChoiceItems(finalItemsList, booleanPrimativeArray, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                checkedItems[which] = isChecked;
            }
        })
        .setPositiveButton(R.string.dialog_ok, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                for (int i = 0; i < checkedItems.length; i++) {
                    if (checkedItems[i]) {
                        selectedItems.add((String) finalItemsList[i]);
                    }
                }
                doStuffWithSelectedItems(selectedItems);
                dialog.dismiss();
                dialogMultiItem = null;
            }
        });

    dialogMultiItem = dialog.show();
}
4

2 回答 2

2

AlertDialog.Builder setMultiChoiceItems 方法从给定的数组创建一个列表,并提供一个侦听器来通知您的应用程序有关更改。此方法不需要提前调用 setView,因此这样做会无缘无故地将空布局添加到 AlertDialog 中。

尽管文档在这一点上有点模糊,但我相信,正如您在评论中所说,它会使用 CharSequence[] 填充自己的 ListView,而不管通过 .setView() 方法提供了什么视图。

于 2013-10-12T08:07:52.847 回答
0

错误是因为你的代码通过调用命令builder创建了两组数据源

  • 设置视图()
  • setMultiChoiceItems()。一起。

如果代码调用会导致同样的错误

  • 设置视图()
  • 设置适配器()

一起。

解决方案是只调用 setAdapter(),不要额外调用 setView()。

于 2015-12-24T17:45:01.547 回答