Я просмотрел ваш код и обнаружил, что вы сохраняете представления в SparseArray
, а затем пытаетесь обновить его при событии кнопки. Ну, это не сработает, у вас возникнет проблема с тем, что вы сказали все видимые представления.будут затронуты и невидимые элементы не будут затронуты, потому что эти невидимые элементы фактически переработаны, или вы могли бы сказать, что они больше не существуют, поэтому любые изменения в них не сработают.
Самый правильный способ сделать этобудет хранить значение в модели и обновлять представления, когда они станут видимыми.
У меня не было многих ваших классов, таких как Categories
, BaseViewHolder
и т. д., но я все еще пытаюсь поставитьПример ниже, чтобы соответствовать вашему случаю:
Давайте рассмотрим, что у меня есть модель Categories
, и я хочу показать ic_done
, если категория выбрана, и ic_undone
, если категория не выбрана, так чтоя бы сделал это:
В MyActivity
классе:
public void onEvent(ButtonEvent buttonEvent) {
if (buttonEvent.isNull()) {
Categories categories = list.get(buttonEvent.getColumnPosition());
categories.setSelected(false);
adapter.notifyDatasetChanged();
} else {
Categories categories= list.get(buttonEvent.getColumnPosition());
categories.setSelected(true);
adapter.notifyDatasetChanged();
}
}
В CurrentStatusAdapter
классе.
@Override
public void onBindViewHolder(@NonNull CurrentPartViewHolder holder, int position)
{
Categories categories = data.get(position);
if (categories.isSelected()){
holder.getImageView().setImageResource( R.drawable.ic_done);
}else {
holder.getImageView().setImageResource( R.drawable.ic_undone);
}
}
Я надеюсь, что это действительно покрывает ваш случай, еслине тогда дайте мне знать в комментариях.