1
/
5

【レポート速報】Google I/O 2016 – Day3 「RecyclerViw ins and outs」

Androidエンジニア+セキュリティ全般を兼務する鈴木です。
Google I/O 最終日のレポートをしようと思います。ちなみに本日は 更に涼しく、むしろ寒く感じた一日でした。今日は参加したセッションのうちの「RecyclerViw ins and outs」について報告したいと思います。

本セッションは非常に内容が濃く、RecyclerViewの前身であるListViewの説明、RecyclerViewの開発の経緯などのジャブから、詳細までカバーしておりました。すべての内容の詳細を記述するのは~~めんどくさい~~手間なので、本ブログでは内容のまとめまでに留めておきます。各内容に飛べるようリンクも貼っておきましたので是非ご活用ください。

Chap1: ListViewの誕生と課題、そしてRecyclerViewへ

動画の0:00~ListViewの歴史についての話当時の制限下において、当時の課題をどう解決していったか。RecyclerViewを作るにあたった動機がここで紹介される形。

Chap2: RecyclerView概要

動画の12:16~RecyclerViewとそのコンポーネントの概要について紹介 LayoutManager: アイテムのRecyclerView内におけるポジションItemAnimator: アイテムのアニメーションAdapter: アイテムの提供

Chap3: Adapter

動画の14:25~ここは概要だけなので見なくていいかも

Chap4: ViewHolder

動画の17:18~ViewHolderのライフサイクルと各ライフサイクルにおけるフロー ViewHolderの生成: 17:35ViewHolderのリサイクル時(remove & reserve):18:35ViewHolderのリサイクル時その2:20:39ViewHolderの破棄:21:46ViewHolderの破棄その2: 21:44

Chap5: ItemAnimator

動画の26:45~Predictive Animationについての紹介ここも概要だけなので見なくていい。Chap6へのイントロだけのためにある。

Chap6: ChildHelper

動画の30:37~LayoutMangerに仮想的なListを返すクラス 例えばSwipeによってアイテムが除去されるアニメーションが開始されると、ChildHelperはSwipeされた後の仮想的ListをLayoutManagerに返す

Chap7: AdapterHelper

動画の32:47~Adapterに対するnotify(add, remove, insert, move)操作を記録するクラス こいつのおかげで再描画終了前にアイテムを操作しても、正しいアイテムを操作できる

Chap8: ItemDecoration

動画の36:04~下記メソッドの紹介 getItemOffsets(), onDraw(), onDrawOver():ItemDecorationでadapterへのアクセスはしないViewHolderに必要な情報は保存するべし

Chap9: RecycledViewPool

動画の39:04~同一Context内でRecycledViewを共有する

Chap10: ItemTuchHelper

動画の40:43~ItemTouchHelper及びそのメソッドの紹介

Chap11: Tips

動画の42:33~アイテムは更新されないかぎりonBindは呼ばれないonBindViewHolder時のpositionは最終的な位置ではない 以下の書き方はNG

public void onBindViewHolder(final ViewHolder holder, final int position) {
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
               removeAtPosition(holder.getAdapterPositioN()); 
               //removeAtPosition(position); // NG!
          }
    });
}

Payloads: ViewHolderのいち部分を更新したい時に指定するのに有効。下記のメソッドで使用可能な引数onBindViewHoldernotifyItemChangednotifyItemRangeChangedOnCreateViewHolderで既存のViewHolderの使い回しはしない!Adapter positionとLayoutポジションの使い分け Layout positionはonLayoutが呼ばれるまで変更されないので注意

以上です。幾つか自分が以前はまったポイントもあり、非常にためになるセッションでした。是非のちほどyoutubeでみてください。

株式会社マネーフォワードでは一緒に働く仲間を募集しています
元記事: 【レポート速報】Google I/O 2016 – Day3 「RecyclerViw ins and outs」
1 いいね!
1 いいね!

今週のランキング

小川 昌之さんにいいねを伝えよう
小川 昌之さんや会社があなたに興味を持つかも