Я знаю, что этот вопрос задан раньше и получил понимание примерно того, что происходит, но я не могу найти решение.Элементы ImageButton с возможностью изменения при щелчке в ListView, по-видимому, меняется на 2 элемента одновременно
В моем адаптере пользовательского списка и внутри public View getView(int position, View convertView, ViewGroup parent) {
ive настройка функции щелчка для элементов 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);
}
});
The Imagebutton - это чистая звезда, а при нажатии на нее меняется то же, что и на желтую звезду. Он работает нормально.
Проблема заключается в том, когда я нажимаю элемент «Позиция» в позиции «0 Звезд», чтобы сделать желтый, он также изменяется для пункта 8 далее по списку, не находящемуся в «Пока еще». если я нажимаю позицию 1, меняют также позицию 9 и т. д.
Я осмотрел и исследовал проблему и даже попробовал держатель для Imagebutton, но не пошел. Что-то предотвращает внесение изменений для ImageButton только в правильную позицию.
Благодаря
Решение является изначально указан элемент флага в массиве для каждого пункта. Затем onClick устанавливает флаг в true только для этого элемента. Тогда в getView это всего лишь случай инструкции if, чтобы проверить флаг, поскольку элементы получают Cycled.
//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'. – Buddy
@Buddy - не проблема, его довольно долго, потому что я проверяю базу данных, если ее закладки – Tasos
Возможно, это потому, что вы перерабатываете взгляды и не заново раздуваете их правильно. –