@Override
public View getView(final int position, View view, ViewGroup parent) {
view = _lInflater.inflate(R.layout.all_apps_checked_item, null);
CheckBox chkUhkItem = (CheckBox) view.findViewById(R.id.all_apps_cb);
chkUhkItem.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
_iCheckBoxClick.onCheckCliked(isChecked,_apps.get(position).packageName,position);
}
});
return view;
}
我的公共(public)接口(interface)是
public interface ICheckBoxClick{
void onCheckCliked(boolean isChecked,String packageName,int pos);
}
我对 ICheckBoxClick 的实现是:
//Apps Seletion Dialog
public void showSeletionAppsDialog(Context actityCtx,
final String cat_name, final IAddSubItemsClick iAddSubItemsClick) {
final ArrayList<String> selected = new ArrayList<String>();
final Dialog dialog = new Dialog(actityCtx);
dialog.setTitle("Select Apps =>" + cat_name);
dialog.setContentView(R.layout.all_apps_grid);
GridView appsGrid = (GridView) dialog.findViewById(R.id.all_apps);
ICheckBoxClick icheckBoxClick = new ICheckBoxClick() {
@Override
public void onCheckCliked(boolean isChecked, String pkgName, int pos) {
if (isChecked) {
selected.add(cat_name + "," + pkgName);
} else {
selected.remove(pos);
}
}
};
appsGrid.setAdapter(new AllAppsSelectionAdapter(actityCtx,
icheckBoxClick));
}
Selected.remove(pos)
抛出 Array out of bound 异常。
12-30 12:59:18.106: E/AndroidRuntime(13028): java.lang.IndexOutOfBoundsException: Invalid index 7, size is 1
12-30 12:59:18.106: E/AndroidRuntime(13028): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
12-30 12:59:18.106: E/AndroidRuntime(13028): at java.util.ArrayList.remove(ArrayList.java:403)
从上面的日志中,我了解到 ArrayList 的大小仅为 1,而您正试图删除 & 元素。因此 arrayOutOfBoundException。我没有更好的解决方案来解决这个问题。
最佳答案
use remove(Object object) method instead remove(int index)
问题就在这里..
if (isChecked) {
selected.add(cat_name + "," + pkgName);
} else {
selected.remove(pos);
}
您正在将 String
添加到 Arraylist
...但是您正在从 Arraylist
中删除 int..如果您在 ListView 中添加了第一项..只有一项..如果您添加了第 5 项,则有两个元素..如果您删除第 5 个元素,您将删除 remove(5)
但只有两个元素..所以使用remove(object object)
方法而不是 remove(int index)
改变你的代码......
if (isChecked) {
selected.add(cat_name + "," + pkgName);
} else {
selected.remove(cat_name + "," + pkgName);
}
关于java - 使用 GridView 时 Android 中的 ArrayOut of Bound 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20835298/