Fun with RecyclerView
-
Upload
globallogic-ukraine -
Category
Documents
-
view
364 -
download
0
Transcript of Fun with RecyclerView
CONFIDENTIAL
Agenda
1. ListView vs LinearLayout
2. Adapter
3. ItemDecoration
4. ItemAnimator
5. LayoutManager
6. Q&A
CONFIDENTIAL
RecyclerView.Adapter<ViewHolder> @Override public int getItemCount() { return mData.size(); }
@Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_layout, viewGroup, false); // initializing view’s listeners return new ViewHolder(view); }
@Override public void onBindViewHolder(ViewHolder viewHolder, int position) { viewHolder.update(mData.get(position)); }
CONFIDENTIAL
RecyclerView.ItemDecoration
Item #2
Item #1
Item #2
Item #1
Item #2
Item #1
@Override public void onDraw(Canvas canvas, RecyclerView parent, RecyclerView.State state) { // drawing under the views }
@Override public void onDrawOver(Canvas canvas, RecyclerView parent, RecyclerView.State state) { // drawing over the views }
@Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { // adding extra paddings to the view }
CONFIDENTIAL
RecyclerView.ItemAnimator● DefaultItemAnimator● Call notifyItemXXXX() instead of
notifyDataSetInvalidated()● Custom ItemAnimator
CONFIDENTIAL
RecyclerView.ItemAnimator
Custom ItemAnimator:● animateXXXX()● runPendingAnimations()● endAnimation(), endAnimations()
*do not forget to call dispatchXXXFinished()
CONFIDENTIAL
RecyclerView.ItemAnimator public boolean animateAdd(final ViewHolder holder) { endAnimation(holder); mPendingAdditions.add(holder); return true; }
public void runPendingAnimations() { ... if (!mPendingAdditions.isEmpty()) { final ArrayList<ViewHolder> additions = new ArrayList<ViewHolder>(); additions.addAll(mPendingAdditions); mAdditionsList.add(additions); mPendingAdditions.clear(); for (ViewHolder holder : additions) { animateAddImpl(holder); } additions.clear(); mAdditionsList.remove(additions); } }
CONFIDENTIAL
RecyclerView.LayoutManager
Predefined LayoutManagers:
● LinearLayoutManager: horizontal and vertical
● StaggeredGridLayoutManager
● GridLayoutManager
● Custom LayoutManager
CONFIDENTIAL
RecyclerView.LayoutManager
Custom LayoutManager:
● generateDefaultLayoutParams()
● onLayoutChildren()
● canScrollHorizontally() & canScrollVertically()
● scrollHorizontallyBy() & scrollVerticallyBy()
● offsetChildrenHorizontal() & offsetChildrenVertical()
● layoutDecorated(), getDecoratedXXXX()
CONFIDENTIAL
RecyclerView.LayoutManager
● supportsPredictiveItemAnimations()
● onLayoutChildren()● RecyclerView.State.isPreLayout(
)● LayoutParams.isItemRemoved()
Remove item animation:
A B C D E FA FC D E
CONFIDENTIAL
RecyclerView.LayoutManager
● getScrapList()● addDisappearingView() instead of addView()
Insert item animation:
A B C D EA EB C DX