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 likes
