我正在使用带有多个选择项的对话框。用户单击某个项目后,会将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
是什么意思,我假设您的selectedItemList
和itemList
都具有不同的类型。如果他们持有相同的类型,你可以 selectedItemsList.remove(itemsList.get(which))
如果这样做没有意义,请发布您的SelectedItem类以及您在其中创建两个列表的位置,我们将为您提供进一步的帮助。