Я знаю, что этот вопрос задавали раньше, и я примерно понял, что происходит, но я не могу найти решение.
В моем адаптере пользовательского списка и внутри public View getView(int position, View convertView, ViewGroup parent) {
я настроил функцию щелчка для элементов ImageButton.
final ImageButton bookmark = (ImageButton)
convertView.findViewById(R.id.bookmarkthis);
bookmark.setTag(position);
bookmark.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bookmark.setImageResource(R.drawable.ic_bookmarked);
bookmark.setTag(R.drawable.ic_bookmarked);
}
});
Кнопка Image представляет собой прозрачную звезду, и при нажатии она меняет тот же рисунок на желтую звезду. Работает нормально.
Проблема заключается в том, что когда я нажимаю значок «Элемент в позиции 0», чтобы сделать его желтым, он также меняется для элемента 8, расположенного дальше по списку, которого еще нет в представлении. если я нажму на позицию 1, она также изменится на позицию 9 и так далее.
Я осмотрелся, изучил проблему и даже попробовал держатель для кнопки изображения, но безуспешно. Что-то мешает доступному изменению для ImageButton только его правильной позиции.
Спасибо
Решение состоит в том, чтобы изначально установить элемент флага в массиве для каждого элемента. Затем onClick установите флаг true только для этого элемента. Затем в getView это просто случай оператора if для проверки флага, когда элементы зацикливаются.
//in array creation
items.setFlag("false");
//in getView as you set Text and what ever get the Flag state
String flag = m.getFlag();
//check the flag state and take action in this case change the icon accordingly
if (Objects.equals(flag, "true")) {
bookmark.setImageResource(R.drawable.ic_bookmarked);
bookmark.setTag(R.drawable.ic_bookmarked);
}
else {
bookmark.setImageResource(R.drawable.ic_bookmark);
}
// and in the click function
@Override
public void onClick(View v) {
bookmark.setImageResource(R.drawable.ic_bookmarked);
m.setFlag("true");
}
getView
. - person Buddy   schedule 22.09.2015