我正在使用带有多个选项的对话框。一旦用户单击某个项目,itemsList
中的项目就会被添加到 selectedItemsList
中,当然,当用户取消选择某个项目时,该项目将从中删除selectedItemsList
。
使用 Monkey 测试我的应用程序时。我收到这些错误:
java.lang.IndexOutOfBoundsException: Invalid index 3, size is 3
...
java.lang.IndexOutOfBoundsException: Invalid index 4, size is 3
代码 fragment :
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 类以及您创建两个列表的位置,我将能够提供进一步的帮助。
关于java - setMultiChoiceItems 单击时 IndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37349265/