gpt4 book ai didi

java - 从 ListView 中删除项目

转载 作者:行者123 更新时间:2023-12-02 07:17:18 26 4
gpt4 key购买 nike

我有包含 TextView 和按钮的 ListView 。当我删除 ListView 项目并尝试向下滚动时,出现异常:

BuildQueue eile = countryList.get(position);

异常(exception):

02-08 19:11:04.279: E/AndroidRuntime(10509): java.lang.IndexOutOfBoundsException: Invalid index 15, size is 15

当我从 ListView 中删除项目时,似乎我没有更新某些内容。我认为 ViewHolder 有问题,但我不知道是什么样的...

我的ArrayAdapter代码:

public class MyCustomAdapter extends ArrayAdapter<BuildQueue> {

private ArrayList<BuildQueue> countryList;

public MyCustomAdapter(Context context, int textViewResourceId,ArrayList<BuildQueue> countryList) {
super(context, textViewResourceId, countryList);
this.countryList = new ArrayList<BuildQueue>();
this.countryList.addAll(countryList);
}

private class ViewHolder {
TextView code;
TextView field;
Button del;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder = null;

if (convertView == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.queue_buildings, null);

holder = new ViewHolder();
holder.code = (TextView) convertView.findViewById(R.id.code);
holder.field = (TextView) convertView.findViewById(R.id.field_text);
holder.del = (Button) convertView.findViewById(R.id.del_button);
convertView.setTag(holder);

holder.del.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Button del_button = (Button) v;
BuildQueue building = (BuildQueue) del_button.getTag();
countryList.remove(building);
dataAdapter.notifyDataSetChanged();
}
});
} else {
holder = (ViewHolder) convertView.getTag();
}
BuildQueue eile = countryList.get(position);
holder.code.setText(" ( Level: " + eile.getOld_level() + " to "+eile.getNew_level()+")");

holder.field.setText(eile.getNameSort());
holder.field.setTag(eile);

holder.del.setText("Delete");
holder.del.setTag(eile);

return convertView;

}
}

最佳答案

您在适配器中使用了两个数组,但只更改了其中一个。

每个适配器都使用getCount()来确定应绘制多少行。 ArrayAdapter 的 getCount()只需询问您传递给 super 构造函数的数组的大小:super(context, textViewResourceId,countryList);。但是您还使用了第二个本地数组,当您从此 countryList 中删除一个值时,getCount() 并不知道发生了这种情况,这会导致 getView() 抛出 IndexOutOfBoundsException...

要么扩展 BaseAdapter,要么使用 ArrayAdapter 的方法,如 getItem() , add() ,和remove()并删除您的本地数据集。

关于java - 从 ListView 中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14778602/

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