2016-04-30 6 views
17

Я пытаюсь изменить поле со временем в своем RecyclerView. Каждый человек ViewHolder содержит CardView и еще несколько видов внутри. Единственный взгляд, который я хочу оживить, - это со временем. Как вы можете видеть, нет анимации:Частичное обновление RecyclerView.ViewHolder

adapter.notifyDataSetChanged(); 

RecyclerView with no animations

Обновления элементы один на один не помогают, потому что тогда все CardView вспышки:

int len = adapter.getItemCount(); 
for(int i=0;i<len;i++) { 
    adapter.notifyItemChanged(i); 
} 

enter image description here

Есть ли способ получить список всех ViewHolders, чтобы затем обновить (оживить) только один TextView внутри каждого?

+1

Вам необходимо добавить элемент аниматор –

ответ

35

Вы можете уведомить своих наблюдателей RecyclerView.Adapter, чтобы внести частичное обновление своего RecyclerView.ViewHolders, передав полезную нагрузку Object.

notifyItemRangeChanged(positionStart, itemCount, payload); 

Где payload может быть или содержать флаг, который представляет относительное или абсолютное время. Чтобы привязать payload к вашим держателям, переопределите следующий метод onBindViewHolder(viewHolder, position, payloads) в вашем адаптере и проверьте параметр payloads для данных.

@Override 
public void onBindViewHolder(MyViewHolder viewHolder, int position, List<Object> payloads) { 
    if (payloads.isEmpty()) { 
     // Perform a full update 
     onBindViewHolder(viewHolder, position); 
    } else { 
     // Perform a partial update 
     for (Object payload : payloads) { 
      if (payload instanceof TimeFormatPayload) { 
       viewHolder.bindTimePayload((TimeFormatPayload) payload); 
      } 
     } 
    } 
} 

В вашем методе MyViewHolder.bindTimePayload(payload), обновить свое время TextViews в формат времени, указанного в payload.

+1

Работает красиво. Большое спасибо. – PhpXp

+0

Брат, которого вы спасли днем, работал как шарм, я собирался изменить вид ресайклера на просмотрщик. Но вы отвечаете также заставляли меня учиться, а также спасли много часов работы –

Смежные вопросы