RecyclerViewのようなものを作ろうとしたけどうまくいかなかった
仕事で作ったクラスの構造がよくなかったのでそのその反省を少しまとめてみる。
Adapter
とは別にLayoutManager
的なものも作る必要があったので、RecyclerView
の構造を参考にして似たようなものを作ることにした。RecyclerView
をなんとかして使えるようにすればよかったのかもしれないが、要件に合うLayoutManager
の作り方がわからなくてやめた。今思うとLayoutManager
は必要なかったかもしれない。- アニメーションについても
RecyclerView
のパターンを参考にしてItemAnimation
的なものでアニメーションをやったらいいのではないかと思い立ち、えいやっと追加した。この時にViewHolder
がいろんなインデックスを持っていることの意味をもう少し考えておくべきだった。 - ただ単にデータの更新によって
View
を付けたり外したりするだけならよかった。新しく増えたデータをView
にバインドした後で登場させるアニメーションや、データが減った時にView
を退場させるアニメーションのことを考慮しきれていなかった。データがなくなったらView
もなくなるというのが間違いだった。アニメーションが終わるまでremoveできない。その間にまたデータが復活するかもしれない。RecyclerView
の子View
は取り付けられてから外されるまで、インデックスやフラグの値を更新しながらView
のライフサイクルの中でLayoutされたりデータをバインドされたりアニメーションで動かされたりしながら使われなくなったらプールの中に入る。データがなくなった時必ずしも取り外されるとは限らない。 ViewPool
からアタッチされていないViewを探してくるところもうまくいってなかった。- アニメーションが終わったのをどうやって知るのがいいのかわからない。
- アニメーションは中断可能であり再入可能でなければならない。退場アニメーションの途中でデータが復活することがあるかもしれない。登場アニメーションの最中にデータが消えてしまうかもしれない。