gpt4 book ai didi

java - 使用 GridView 时 Android 中的 ArrayOut of Bound 异常

转载 作者:行者123 更新时间:2023-11-29 21:20:07 26 4
gpt4 key购买 nike

@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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com