AndroidのRecyclerViewでレイアウトを分けて表示しているのですが、継承したViewHolder内のほぼ似たコードを基底クラスでまとめて関数化できないでしょうか?
解決したいこと
独学でAndroid・Kotlinでアプリ開発をしています。
タイトルの通り継承したクラスにほぼ同一のコードがあり、そのコードを基底クラスで関数化できるのか勉強不足のためわかりません。どなたかご教授願います。
実装している内容
MainAdapter.kt
class MainAdapter(
val mViewModel: MainViewModel,
private val frag: MainFragment
) :
ListAdapter<Data, MainAdapter.ViewHolder>(ITEM_CALLBACK) {
private val liveData = mViewModel.liveData
// ...省略
override fun onBindViewHolder(holder: ViewHolder, pos: Int) {
val data = liveData.value?.get(pos) ?: Data()
when (holder.itemViewType) {
// グリッドレイアウト
Layout.GRID.num -> {
val view = holder as GridViewHolder
view.bind(data, pos)
}
// リストレイアウト
Layout.LIST.num -> {
val view = holder as ListViewHolder
view.bind(data, pos)
}
}
}
abstract class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
abstract fun bind(data: Data, pos: Int)
}
inner class GridViewHolder(val binding: GridItemBinding) : ViewHolder(binding.root) {
// ====== ここから ===== //
override fun bind(data: Data, pos: Int) {
binding.run {
viewModel = mViewModel
this.data = data
fragment = frag
lifecycleOwner = parentLifecycleOwner
executePendingBindings()
}
}
// ====== ここまで ===== //
}
inner class ListViewHolder(val binding: ListItemBinding) : ViewHolder(binding.root) {
// ====== ここから ===== //
override fun bind(data: Data, pos: Int) {
binding.run {
viewModel = mViewModel
this.data = data
fragment = frag
lifecycleOwner = parentLifecycleOwner
executePendingBindings()
}
}
// ====== ここまで ===== //
}
}
0