Слайд 5Компоненты RecyclerView
LayoutManager - размещает элементы
ItemAnimator - анимирует элементы
Adapter - создает элементы
Decorator - дорисовывает элементы
ViewHolder - кеширует
findViewById
Слайд 6LayoutManager
Обязанности LayoutManager’а:
размещает элементы
отвечает за размер элементов
отвечает за то, какие элементы больше
не нужны
отвечает за скроллинг
отвечает за View Focusing т.е. на каком элементе сфокусироваться
Слайд 7LayoutManager
LinearLayoutManager (линейное размещение элементов)
GridLayoutManager (табличное)
StaggeredGridLayoutManager (сложное)
Слайд 9Adapter
Обязанности Adapter’а:
создание ViewHolder’ов
заполнение ViewHolder’ов информацией
уведомление RecyclerView о том какие элементы изменились
обработка касаний
частичное обновление
данных
управление количеством ViewType’ов
Слайд 10Основное API Adapter
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
public void onBindViewHolder(ViewHolder holder,
int position)
public int getItemCount()
Слайд 11Методы notifyItemX
notifyDataSetChanged()
notifyItemChanged()
notifyItemInserted()
notifyItemMoved()
notifyItemRemoved()
notifyItemRangeChanged()
notifyItemRangeInserted()
notifyItemRangeRemoved()
Слайд 12Польза от методов notifyItemX
Нет лишних вызовов onBindViewHolder();
Возможность анимировать и перемещать элементы как
угодно
Нет лишних вызовов onCreateViewHolder()
Слайд 14Для чего нужен ViewHolder?
Кеширование относительно дорогого findViewById
Основной элемент Recycling’а
Слайд 15Жизнь ViewHolder
Layout
Manager
Adapter
Recycler
Pool
Recycler
View
Cache
getViewForPosition
yes
Слайд 16Layout
Manager
Adapter
Recycler
Pool
Recycler
View
Cache
getViewForPosition
bindViewHolder
getViewHolderByType
yes
no
getViewType
Жизнь ViewHolder
Слайд 17Layout
Manager
Adapter
Recycler
Pool
Recycler
View
Cache
getViewForPosition
getViewHolderByType
createViewHolder
no
no
bindViewHolder
Жизнь ViewHolder
Слайд 18Recycler
Pool
Recycler
View
addViewToPool
Есть ли место для еще одного VH типа X
Смерть ViewHolder
yes
no
Смерть ViewHolder
Слайд 19ItemDecorator
ItemDecorator - дополняет представление в зависимости от какой-либо логики
Для чего применяется:
добавление
разделителей и отступов
выделение элементов списка
рисование любого контента за и перед view
Слайд 20ItemDecorator
Круг
Треугольник
Квадрат
Овал
Ромб
Слайд 22API ItemDecorator’а
public void getItemOffsets(Rect outRect,
View view,
RecyclerView parent,
RecyclerView.State state)
public void onDraw(Canvas canvas,
RecyclerView parent,
RecyclerView.State state)
public void onDrawOver(Canvas c,
RecyclerView parent,
RecyclerView.State state)
Слайд 23ItemTouchHelper
Drag&Drop
Swipe to dismiss
Слайд 26API ItemTouchHelper
public int getMovementFlags(RecyclerView recyclerView,
RecyclerView.ViewHolder viewHolder)
public boolean onMove(RecyclerView recyclerView,
RecyclerView.ViewHolder viewHolder,
RecyclerView.ViewHolder target)
public void onSwiped(RecyclerView.ViewHolder viewHolder,
int direction)