AdapterToolboxを使ったいろんなRecyclerViewの使い方

## AdapterToolboxとは
AdapterToolboxはRecyclerViewと、ListViewやSpinnerのようなAdapterViewのための便利クラスを含んだライブラリです。

### GitHubリポジトリとサンプルコード
リポジトリの中のexampleモジュールが１つのアプリケーションになっており実行すると後述の動画のアプリが起動できます。

[GitHubリポジトリはこちら](https://github.com/cattaka/AdapterToolbox)


### 主要なクラス
- [ScrambleAdapter](https://github.com/cattaka/AdapterToolbox/blob/master/adapter-toolbox/src/main/java/net/cattaka/android/adaptertoolbox/adapter/ScrambleAdapter.java)
 - RecyclerView.Adapterをベタで作るとViewHolderに関する処理も一緒に書かくことになります。単一itemViewTypeを取り扱う場合は良いのですが、複数のitemViewTypeを組み合わせるときは組み合わせごとにAdapterを作ることになり非効率的です。ScrambleAdapterを使うと、ViewHolderのCreate/Bindする処理を[ViewHolderFactory](https://github.com/cattaka/AdapterToolbox/blob/master/adapter-toolbox/src/main/java/net/cattaka/android/adaptertoolbox/adapter/ScrambleAdapter.java#L98)といった別クラスに切り出すことができ、後から必要に応じて組み合わせることができるようになります。
- [ListenerRelay](https://github.com/cattaka/AdapterToolbox/blob/master/adapter-toolbox/src/main/java/net/cattaka/android/adaptertoolbox/adapter/listener/ListenerRelay.java)
 - よく使用されるView用のListenerメソッドをまとめたものの空実装です。[ForwardinListener](https://github.com/cattaka/AdapterToolbox/blob/master/adapter-toolbox/src/main/java/net/cattaka/android/adaptertoolbox/adapter/listener/ForwardingListener.java)と組み合わせて使用します。
- CodeLabelAdapter
 - 主にEnumをSpinnerで使用することを想定したAdapterです(Enum以外も可能)。
 - [ICodeLabelインターフェース](https://github.com/cattaka/AdapterToolbox/blob/master/adapter-toolbox/src/main/java/net/cattaka/android/adaptertoolbox/data/ICodeLabel.java)を実装したEnum/ClassならなんでもSpinnerに使用できます。
 - 関連記事：[Spinnerにenumを使いたいときのアプローチ](http://qiita.com/cattaka/items/f8dbb20883d44b31aee0)
- ClassicScrambleAdapter
 - ViewHolderFactoryを従来のAdapterViewで使用するためのAdapterです。ScrambleAdapterと同じように使用できます。
- AbsTreeItemAdapter
 - 折りたたみ可能なツリー構造を持ったリストを表示するためのアダプターです。
- AbsChoosableTreeItemAdapter
 - 折りたたみ可能なツリー構造を持ったリストで、選択可能な項目を表示するためのアダプターです。

### 使い方
```groovy
repositories {
    maven {
        url "http://dl.bintray.com/cattaka/maven"
    }
}

dependencies {
    compile 'net.cattaka:adapter-toolbox:$VERSION@aar'
}
```

$VERSIONの箇所には https://bintray.com/cattaka/maven/adapter-toolbox/view にある使いたいバージョンのものを指定してください。



## 参考動画


### ヘッダーとフッター
<blockquote class="twitter-video" data-lang="ja"><p lang="ja" dir="ltr">RecyclerViewでのヘッダーとフッター（記事まとめ中） <a href="https://t.co/NFbwpIWzKm">pic.twitter.com/NFbwpIWzKm</a></p>&mdash; 住友 孝郎 (@cattaka_net) <a href="https://twitter.com/cattaka_net/status/740927913030098944">2016年6月9日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

[ソースコードはこちら](https://github.com/cattaka/AdapterToolbox/blob/master/example/src/main/java/net/cattaka/android/adaptertoolbox/example/RecyclerViewHeaderExampleActivity.java)

## セクション分け
<img src="https://qiita-image-store.s3.amazonaws.com/0/55138/5cc3223c-31e5-2a74-a0ea-9ba17d7e3cca.png" width=40%>

[ソースコードはこちら](https://github.com/cattaka/AdapterToolbox/blob/master/example/src/main/java/net/cattaka/android/adaptertoolbox/example/MultiAdapterExampleActivity.java)
[関連記事RecyclerViewでセクション分けをする](http://qiita.com/cattaka/items/22e07f96b3d016548d92)

## 一つの項目に複数のボタンを設置
<blockquote class="twitter-video" data-lang="ja"><p lang="ja" dir="ltr">RecyclerViewの一つの項目に複数の操作項目（記事まとめ中） <a href="https://t.co/IiciHojSxh">pic.twitter.com/IiciHojSxh</a></p>&mdash; 住友 孝郎 (@cattaka_net) <a href="https://twitter.com/cattaka_net/status/740928892622360576">2016年6月9日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

[ソースコードはこちら](https://github.com/cattaka/AdapterToolbox/blob/master/example/src/main/java/net/cattaka/android/adaptertoolbox/example/ComplexStringExampleActivity.java)


### 複数のデータ型をゴチャまぜにして表示できるリスト
<blockquote class="twitter-video" data-lang="ja"><p lang="ja" dir="ltr">RecyclerView上で複数のデータ型のものをゴチャまぜに扱うのに上手い方法が無いかと試行錯誤してた <a href="https://t.co/pi3mLYWqAf">https://t.co/pi3mLYWqAf</a> <a href="https://t.co/92VODngSyC">pic.twitter.com/92VODngSyC</a></p>&mdash; 住友 孝郎 (@cattaka_net) <a href="https://twitter.com/cattaka_net/status/731888016457760769">2016年5月15日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

[ソースコードはこちら](https://github.com/cattaka/AdapterToolbox/blob/master/example/src/main/java/net/cattaka/android/adaptertoolbox/example/ScrambleAdapterExampleActivity.java)


### 複数のデータ型をゴチャまぜにした上で編集操作が可能なリスト
<blockquote class="twitter-video" data-lang="ja"><p lang="ja" dir="ltr">RecyclerView上で複数のデータ型をゴチャまぜにした上で編集操作をするときに上手い方法が無いかと試行錯誤してた <a href="https://t.co/Z4GMEZrU79">https://t.co/Z4GMEZrU79</a> <a href="https://t.co/pqaTEicw97">pic.twitter.com/pqaTEicw97</a></p>&mdash; 住友 孝郎 (@cattaka_net) <a href="https://twitter.com/cattaka_net/status/731891053389701120">2016年5月15日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

[ソースコードはこちら](https://github.com/cattaka/AdapterToolbox/blob/master/example/src/main/java/net/cattaka/android/adaptertoolbox/example/ManipulableListExampleActivity.java)


### RecyclerViewでツリー状に表示したのを選択できるリスト
<blockquote class="twitter-video" data-lang="ja"><p lang="ja" dir="ltr">RecyclerViewでツリー状に表示したのを選択するAdapterを作ってた <a href="https://t.co/NUCRALqAgI">https://t.co/NUCRALqAgI</a> <a href="https://t.co/qBEp3Q2GzV">pic.twitter.com/qBEp3Q2GzV</a></p>&mdash; 住友 孝郎 (@cattaka_net) <a href="https://twitter.com/cattaka_net/status/734063377534885889">2016年5月21日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

[ソースコードはこちら](https://github.com/cattaka/AdapterToolbox/blob/master/example/src/main/java/net/cattaka/android/adaptertoolbox/example/MultiChoosableTreeItemAdapterExampleActivity.java)


### ItemViewTypeを動的に切り替える
<blockquote class="twitter-video" data-lang="ja"><p lang="ja" dir="ltr">動的にItemViewTypeを切り替えて見るテスト(記事まとめ中) <a href="https://t.co/dUh3fI7msP">pic.twitter.com/dUh3fI7msP</a></p>&mdash; 住友 孝郎 (@cattaka_net) <a href="https://twitter.com/cattaka_net/status/740929984110284800">2016年6月9日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

[ソースコードはこちら](https://github.com/cattaka/AdapterToolbox/blob/master/example/src/main/java/net/cattaka/android/adaptertoolbox/example/FizzBuzzExampleActivity.java)


### Spinnerでツリー上の項目を使う
<blockquote class="twitter-video" data-lang="ja"><p lang="ja" dir="ltr">AndroidのSpinnerでツリー上の項目を使うコードも書いてた <a href="https://t.co/SYYaCtmnm4">https://t.co/SYYaCtmnm4</a> <a href="https://t.co/gHIOQAmDLL">pic.twitter.com/gHIOQAmDLL</a></p>&mdash; 住友 孝郎 (@cattaka_net) <a href="https://twitter.com/cattaka_net/status/736917367356166144">2016年5月29日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

[ソースコードはこちら](https://github.com/cattaka/AdapterToolbox/blob/master/example/src/main/java/net/cattaka/android/adaptertoolbox/example/SpinnerTreeItemAdapterExampleActivity.java)


### Spinnerでヘッダーをつける
<blockquote class="twitter-video" data-lang="ja"><p lang="ja" dir="ltr">AndroidのSpinnerでヘッダーをつけるコード書いてた <a href="https://t.co/SYYaCtmnm4">https://t.co/SYYaCtmnm4</a> <a href="https://t.co/29m5xKdfkQ">pic.twitter.com/29m5xKdfkQ</a></p>&mdash; 住友 孝郎 (@cattaka_net) <a href="https://twitter.com/cattaka_net/status/736917030922637312">2016年5月29日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

[ソースコードはこちら](https://github.com/cattaka/AdapterToolbox/blob/master/example/src/main/java/net/cattaka/android/adaptertoolbox/example/SpinnerScrambleAdapterExampleActivity.java)


## Espressoによるテスト
[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/FSx8rZnBB0E/0.jpg)](http://www.youtube.com/watch?v=FSx8rZnBB0E)

[ソースコードはこちら](https://github.com/cattaka/AdapterToolbox/tree/master/example/src/androidTest/java/net/cattaka/android/adaptertoolbox/example)