【发布时间】:2011-01-04 02:48:22
【问题描述】:
我正在使用定制的 BaseAdapter 在 ListView 上显示项目。这些项目只是保存在 ArrayList 中的字符串。
列表项上有一个删除按钮(大红色 X),我想从 ArrayList 中删除该项,并通知 ListView 自行更新。
但是,我尝试过的每个实现都会获得神秘的位置编号,因此例如单击项目 2 的删除按钮将删除项目 5。它似乎几乎完全是随机的。
需要注意的一点是元素可以重复,但必须保持相同的顺序。例如,我可以有两次“爱尔兰语”,分别作为元素 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 自行更新,但我得到的位置不正确,所以我不能这样做。
请注意,起初我确实在 getView 方法中使用了 deleteButton clickListener,并使用 'position' 删除了值,但我遇到了同样的问题。
感谢任何建议,这真的让我很恼火。
【问题讨论】:
标签: android listview android-listview