У меня есть RecyclerView, где каждый элемент списка имеет ImageButton, ты образ которого я определяю в onBindViewHolder адаптера() (?):RecyclerView продолжает повторять кэшированные подвид и не смотря на onBindViewHolder
int myVote = getMyVote();
if (myVote != 0) {
Log.d("dbg", myVote + "");
holder.ratingButton.setImageResource(R.drawable.ic_star_grey600_36dp);
}
Так ratingButton является звезда в правом нижнем углу макета списка. Его форма заполнена серым цветом (и, соответственно, записывается запись журнала), если условие (myVote! = 0) выполнено.
Проблема в том, что когда я просматриваю список вниз, я могу наблюдать, как другие звезды заполнились, хотя я вижу единственную запись в окне журнала (для правильного элемента списка). Более того, эти элементы списка с неправильно измененными кнопками повторяются каждые 5 строк, и это меня пугает. Если я изменю
mListView.setItemViewCacheSize(0);, период повторения изменится на 3, поэтому мы можем предположить, что он каким-то образом связан с механизмом кэширования и рециркуляции RecyclerView.
Пожалуйста, помогите мне решить проблему. Благодаря!
Вы показываете блок 'if' для теста' myVote! = 0'. Вставьте блок 'else', где вы вызываете' setImageResource() 'для другого значения. И если у вас нет такого блока 'else', это будет вашей проблемой. – CommonsWare
Внесите оба метода getItemId() и getItemViewType(), как предлагается [здесь] (http://stackoverflow.com/questions/33316837/how-to-prevent-items-from-getting-duplicated-when-scrolling-recycler-view) – Tiger