我正在使用带有多个选择项的对话框。用户单击某个项目后,会将itemsList中的项目添加到selectedItemsList中,当然,当用户取消选择某个项目时,该项目将从selectedItemsList中删除​​。

使用Monkey测试我的应用程序时。我收到这些错误:

java.lang.IndexOutOfBoundsException: Invalid index 3, size is 3

...

java.lang.IndexOutOfBoundsException: Invalid index 4, size is 3


片段:

List<Item> itemsList; // this list is populated before accessing
List<SelectedItem> selectedItemsList;

...

    dialogBuilder.setMultiChoiceItems(playlists, null, new DialogInterface.OnMultiChoiceClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
            if (isChecked) {
                selectedItemsList.add(new SelectedItem(itemsList.get(which).getId()));

            } else if (selectedItemsList.get(which) != null) {
                selectedItemsList.remove(which);
            }

        }
    });


我可以通过检查which是否小于selectedItemsList.size()来“解决”此问题。但是据我所知,如果返回false;不会从selectedItemsList中删除​​该项目,但是将取消选中该复选框。导致一切混在一起

最佳答案

您可以选择的列表大小与您要删除的列表大小不同,因此

            selectedItemsList.remove(which);


你需要

            selectedItemsList.remove(selectedItemsList.getItemWithId(itemsList.get(which).getID())


或类似的东西

getItemWithId不会存在。我不太确定itemsList.getItem是什么意思,我假设您的selectedItemListitemList都具有不同的类型。如果他们持有相同的类型,你可以

        selectedItemsList.remove(itemsList.get(which))


如果这样做没有意义,请发布您的SelectedItem类以及您在其中创建两个列表的位置,我们将为您提供进一步的帮助。

08-18 04:20