Я использую настраиваемый BaseAdapter для отображения элементов в ListView. Элементы - это просто строки, хранящиеся в ArrayList.
На элементах списка есть кнопка удаления (большой красный крестик), и я бы хотел удалить элемент из 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, но позиция, которую я получаю, неверна, поэтому я не могу этого сделать.
Обратите внимание, что я это сделал, на сначала поместите deleteButton clickListener внутри метода getView и используйте 'position' для удаления значения, но у меня была та же проблема.
Любые предложения приветствуются, это меня действительно раздражает.