More Related Content
Similar to AdapterToolboxでRecyclerViewを楽にする (20)
More from Takao Sumitomo (20)
AdapterToolboxでRecyclerViewを楽にする
- 1. 2016/07/21 potatotips #31 (iOS/Android開発Tips共有会) @cattaka_net
AdapterToolboxで
RecyclerViewを楽にする
Takao Sumitomo
@cattaka_net
- 2. 2016/07/21 potatotips #31 (iOS/Android開発Tips共有会) @cattaka_net
自己紹介
● 住友 孝郎(Takao Sumitomo)
● Androidアプリ開発者
● 開発経歴
● Androidアプリ
● iOSアプリ(ちょっとだけ)
● 業務系Webアプリケーション
● 業務系Windowsアプリ
● その他
● 電子工作
● OpenCV
● ウォンテッドリー株式会社所属
2014年12月〜
- 8. 2016/07/21 potatotips #31 (iOS/Android開発Tips共有会) @cattaka_net
RecyclerView.Adapter
● 役割
● データ→ViewHolderの割り当て
● ViewHolderの生成
● Viewの表示内容にデータをバインドする
● RecyclerView.Adapterを継承した
クラスを作って実装する
- 10. 2016/07/21 potatotips #31 (iOS/Android開発Tips共有会) @cattaka_net
RecyclerView.Adapterの実装
public class HogeAdapter extends RecyclerView.Adapter {
@Override
public int getItemViewType(int position) {
/* ここにデータ→ViewHolderの割り当てを書く */
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
/* ViewHolderの生成処理を書く */
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
/* Viewの表示内容にデータをバインドする処理を書く */
}
}
- 11. 2016/07/21 potatotips #31 (iOS/Android開発Tips共有会) @cattaka_net
例:データ型が2個の場合
public class HogeAdapter extends RecyclerView.Adapter {
@Override
public int getItemViewType(int position) {
/* ここにデータ→ViewHolderの割り当てを書く */
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
/* ViewHolderの生成処理を書く */
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
/* Viewの表示内容にデータをバインドする処理を書く */
}
}
←ここが2倍になる
←ここが2倍になる
←ここが2倍になる
- 12. 2016/07/21 potatotips #31 (iOS/Android開発Tips共有会) @cattaka_net
例:データ型が3個の場合
public class HogeAdapter extends RecyclerView.Adapter {
@Override
public int getItemViewType(int position) {
/* ここにデータ→ViewHolderの割り当てを書く */
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
/* ViewHolderの生成処理を書く */
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
/* Viewの表示内容にデータをバインドする処理を書く */
}
}
←ここが3倍になる
←ここが3倍になる
←ここが3倍になる
- 13. 2016/07/21 potatotips #31 (iOS/Android開発Tips共有会) @cattaka_net
例:データ型がn個の場合
public class HogeAdapter extends RecyclerView.Adapter {
@Override
public int getItemViewType(int position) {
/* ここにデータ→ViewHolderの割り当てを書く */
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
/* ViewHolderの生成処理を書く */
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
/* Viewの表示内容にデータをバインドする処理を書く */
}
}
←ここがn倍になる
←ここがn倍になる
←ここがn倍になる
- 15. 2016/07/21 potatotips #31 (iOS/Android開発Tips共有会) @cattaka_net
複数の画面で部分的に共有したいとき
画面1用のAdapter
データ型1についての実装
データ型2についての実装
データ型3についての実装
画面2用のAdapter
データ型3についての実装
データ型4についての実装
コピペせざるを得ない、、、
画面1 画面2
- 17. 2016/07/21 potatotips #31 (iOS/Android開発Tips共有会) @cattaka_net
複数の画面で部分的に共有したいとき
全画面の共通の神Adapter
データ型1についての実装
データ型2についての実装
データ型3についての実装
データ型4についての実装
神Adapterを作る?
画面1 画面2
- 20. 2016/07/21 potatotips #31 (iOS/Android開発Tips共有会) @cattaka_net
データ型
ViewHolderの生成
データをバインドする処理
↑みたいなViewHolderに
専念するクラスを作って
- 21. 2016/07/21 potatotips #31 (iOS/Android開発Tips共有会) @cattaka_net
それを束ねて使えたら嬉しくない?
データ型1に専念するクラス
データ型2に専念するクラス
データ型3に専念するクラス
データ型4に専念するクラス
束ねるAdapter
束ねるAdapter
画面1
画面2
- 24. 2016/07/21 potatotips #31 (iOS/Android開発Tips共有会) @cattaka_net
登場人物
● ViewHolderFactory
● ScrambleAdapter
データ型1用のViewHolderFactory
データ型2用のViewHolderFactory
データ型3用のViewHolderFactory
データ型4用のViewHolderFactory
ScrambleAdapter
ScrambleAdapter
画面1
画面2
- 25. 2016/07/21 potatotips #31 (iOS/Android開発Tips共有会) @cattaka_net
大雑把な使い方
● ViewHolderFactoryを作る
● データが対応可能かの判定処理
● ViewHolderの生成
● Viewの表示内容にデータをバインドする
● 複数のViewHolderFactoryをScrambleAdapter
にセットする
● List<Object>でデータを食わせる
- 26. 2016/07/21 potatotips #31 (iOS/Android開発Tips共有会) @cattaka_net
例
List<Object>
“1”
0
First
“5”
4
Second
NumberViewHolderFactory
StringViewHolderFactory
QuantumViewHolderFactory
- 27. 2016/07/21 potatotips #31 (iOS/Android開発Tips共有会) @cattaka_net
AdapterToolboxの他の機能
● MergeRecyclerAdapter
● iOS的なセクション分けに威力を発揮する
● ヘッダーやフッターの実装も容易
● リスナー周りの実装の簡略化の機構
● Expandableなリスト用のAdapter
- 29. 2016/07/21 potatotips #31 (iOS/Android開発Tips共有会) @cattaka_net
GitHubプロジェクト
● https://github.com/cattaka/AdapterToolbox
● サンプルプログラム付き
● RecyclerViewのJUnit付き
● https://www.youtube.com/watch?v=FSx8rZnBB0E