Одинаковый хэш-код элементов ListView
Добавлено: 16 фев 2015, 01:27
У меня есть ListView с кастомным элементом. В этом кастомном элементе есть кнопка для которой я прописал селектор и состояния. Для адаптера использовал BaseAdapter. Для примера установил 9 элементов списка. Вот содержимое метода getView:
Когда я нажимаю на кнопку в первом элемента, то я фиксирую её как нажатая:
Но пролистав вниз, когда все первые элементы ушли с экрана и заменились другими у меня каким-то чудом стала выделенная кнопка и в 6 элементе. Не много расследовав эту магию, мне удалось выяснить что хэш-код первого элемента и 6-го совпадают, соответственно хэш-код 2-го с 7-м совпадают и т.д. Как можно это исправить, чтобы при прокрутке состояние элемента оставалось неизменным и не повторялось на других?
Если заметить, то я использую паттерн ViewHolder.
Код: Выделить всё
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
View view = convertView;
ViewHolderItem viewHolderItem;
if (view == null){
view = mInflater.inflate(R.layout.item_news, parent, false);
viewHolderItem = new ViewHolderItem();
viewHolderItem.infoText = (TextView) view.findViewById(R.id.info_text_textView);
viewHolderItem.likeButton = (FButton) view.findViewById(R.id.like_post_button);
viewHolderItem.card = (CardView) view.findViewById(R.id.news_item_cardView);
view.setTag(viewHolderItem);
} else {
viewHolderItem = (ViewHolderItem) view.getTag();
}
viewHolderItem.infoText.setText(items[position]);
viewHolderItem.likeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.setSelected(!v.isSelected());
}
});
viewHolderItem.card.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("MYTAG", "Position: " + position + " Hash: " + Long.toString(v.hashCode()));
}
});
return view;
}
static class ViewHolderItem {
TextView infoText;
FButton likeButton;
CardView card;
}
Код: Выделить всё
v.setSelected(!v.isSelected());Если заметить, то я использую паттерн ViewHolder.