我正在使用自定义的BaseAdapter来显示ListView上的项目。这些项目只是存储在ArrayList中的字符串。
列表项上有一个删除按钮(大的红色X),我想从ArrayList中删除该项,并通知ListView更新自己。
然而,我尝试过的每个实现都会得到神秘的位置数字,因此例如,点击第2个项目的删除按钮将删除第5个项目。它似乎几乎完全是随机的。
需要注意的一点是,元素可能会重复,但必须保持相同的顺序。例如,我可以两次拥有"Irish"作为第3和第7个元素。
我的代码如下:
我很乐意从ArrayList中删除该项并使ListView更新,但我获取的位置是不正确的,所以我无法这样做。
请注意,我最初将deleteButton clickListener放在getView方法中,并使用“position”删除该值,但我遇到了相同的问题。
任何建议都将不胜感激,这真的让我很烦恼。
列表项上有一个删除按钮(大的红色X),我想从ArrayList中删除该项,并通知ListView更新自己。
然而,我尝试过的每个实现都会得到神秘的位置数字,因此例如,点击第2个项目的删除按钮将删除第5个项目。它似乎几乎完全是随机的。
需要注意的一点是,元素可能会重复,但必须保持相同的顺序。例如,我可以两次拥有"Irish"作为第3和第7个元素。
我的代码如下:
private static class ViewHolder {
TextView lang;
int position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.language_link_row, null);
holder = new ViewHolder();
holder.lang = (TextView)convertView.findViewById(R.id.language_link_text);
holder.position = position;
final ImageView deleteButton = (ImageView)
convertView.findViewById(R.id.language_link_cross_delete);
deleteButton.setOnClickListener(this);
convertView.setTag(holder);
deleteButton.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.lang.setText(mLanguages.get(position));
return convertView;
}
我后来尝试通过获取标签来找回已删除元素的位置,但它在列表中总是错误的位置。这里给出的位置没有明显的模式,似乎总是随机的。
// The delete button's listener
public void onClick(View v) {
ViewHolder deleteHolder = (ViewHolder) v.getTag();
int pos = deleteHolder.position;
...
...
...
}
我很乐意从ArrayList中删除该项并使ListView更新,但我获取的位置是不正确的,所以我无法这样做。
请注意,我最初将deleteButton clickListener放在getView方法中,并使用“position”删除该值,但我遇到了相同的问题。
任何建议都将不胜感激,这真的让我很烦恼。