- Product Manager
- Web Engineer
- Customer Support
- Other occupations (60)
- Development
-
Business
- Product Manager
- プロダクトマネージャー
- 広報
- カルチャー推進・浸透
- 知財戦略立案・推進・発明発掘
- リスクマネジメント統括本部
- 内部監査
- AML/CFTコンプライアンス
- AML・金融犯罪対策Ops
- 金融コンプライアンス
- システム監査
- ビジネス採用担当
- 経営企画(予実・IR)
- HRBP
- Legal
- 債権管理/MFK
- ToB Sales
- インサイドセールス
- フィールドセールス
- インサイドセールス SDR
- インサイドセールス企画
- オンラインセールス
- SaaS営業、MFBC
- インサイドセールス MFBC
- セールス MFBC
- マーケティングリサーチャー
- マーケター
- データマーケター
- BtoBマーケティングリーダー
- CRMスペシャリスト
- イベントマーケター
- Other
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でみてください。