fresh digitable

めんどくさかったなってことを振り返ったり振り返らなかったりするための記録

RecyclerViewのようなものを作ろうとしたけどうまくいかなかった

仕事で作ったクラスの構造がよくなかったのでそのその反省を少しまとめてみる。

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