RecyclerView.Adapter の onBindViewHolder ではViewType判別に「getItemViewType」と「holderをinstanceofで判定」のどちらを用いるのが良いか (Android)
AndroidのRecyclerView.Adapterの実装において、2種類以上のViewTypeを扱う場合には onBindViewHolder
の実装内で場合分けをする必要があると思っています。
一般的なサンプルコードでは、たとえば以下のような実装が成されていると認識しています:
// in Kotlin
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
when (getItemViewType(position)) {
VIEW_TYPE_MY_STANDARD -> {
(holder as MyStandardViewHolder) // do something
}
VIEW_TYPE_MY_SUB -> {
(holder as MySubViewHolder) // do something
}
else -> throw IllegalStateException()
}
}
対しチームメンバーのコードが、以下のようになっておりました:
// in Kotlin
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
when (holder) {
is MyStandardViewHolder -> {
// do something
}
is MySubViewHolder -> {
// do something
}
else -> throw IllegalStateException()
}
}
このコードは、少なくともプロジェクト内では期待どおりの挙動であることを確認しています。
もし何か想定外の動作をする可能性があればエッジケース含め認識しておきたいと思っているのですが、何か起こりうる問題はありますでしょうか?
また問題が起こり得なければ、そのまま後者のコードを採用したいです。