Наконец я нашел, как обновить только конкретное представление строки в RecyclerView.
(1) Переопределить onBindViewHolder(Recycler.ViewHolder VH, int position, List payloads) в адаптере.
(2) Внутри этого метода onBindViewHolder
if(payloads != null && !payloads.isEmpty() && (payloads.get(0) instanceof customObject)){
// update the specific view
}else{
// I have already overridden the other onBindViewHolder(ViewHolder, int)
// The method with 3 arguments is being called before the method with 2 args.
// so calling super will call that method with 2 arguments.
super.onBindViewHolder(holder,position,payloads);
}
(3) Таким образом, чтобы уведомить об изменении данных и обновить представление, необходимо вызвать notifyItemChanged(int position, Object payload). Необходимо передать customObject (модель, которая содержит данные) в качестве объекта полезной нагрузки.
adapter.notifyItemChanged(i, obj);
Примечание. Необходимо отключить ItemAnimator RecyclerView (по умолчанию он включен). В противном случае объект полезной нагрузки будет пустым.
recyclerView.setItemAnimator(null);
or
((SimpleItemAnimator)recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
ОБНОВЛЕНИЕ: недавно я использовал этот метод, не отключая ItemAnimator. Так что нет необходимости отключать ItemAnimator. - (recyclerview-v7:25.4.0)
для дальнейшего справки
person
chathura
schedule
16.02.2016