【问题标题】:How to create BaseAdapter for RecyclerView with ViewBinding?如何使用 ViewBinding 为 RecyclerView 创建 BaseAdapter?
【发布时间】:2020-06-05 22:22:00
【问题描述】:

我想用 ViewBinding 为 RecyclerView 创建一个 BaseAdapter 类,但是当我尝试以下代码时:

    class SimpleListAdapter<T, K: ViewBinding>(
        private val itemBinding: K,
        val bindFun:(viewBinding:K, listType:T)->Unit
    ): RecyclerView.Adapter<SimpleListAdapter.ViewHolder<K>>() {


        var list:List<T> = emptyList()

        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder<K> {
            return ViewHolder(itemBinding)
        }

        override fun getItemCount()= list.size


        override fun onBindViewHolder(holder: ViewHolder<K>, position: Int) {
            val listItem=list[position]
            bindFun(holder.binding,listItem)
        }

        class ViewHolder<K:ViewBinding>(val binding: K): RecyclerView.ViewHolder(binding.root)
    }

    class HabitListFragment : Fragment() {

        private  val viewModel: HabitListViewModel by lazy{
            ViewModelProvider(this).get(HabitListViewModel::class.java)
        }

        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                                  savedInstanceState: Bundle?): View {
            val itemBinding=HabitListItemBinding.inflate(inflater)

            val listAdapter=SimpleListAdapter<SummaryTumple,HabitListItemBinding>(itemBinding){
                    habitListItemBinding: HabitListItemBinding, summaryTumple: SummaryTumple ->
                        habitListItemBinding.desc.text=summaryTumple.description
                        habitListItemBinding.title.text=summaryTumple.title
            }

        /*....*/

        }

    }

我遇到了一个错误:

java.lang.IllegalStateException:不得附加 ViewHolder 视图 创建时。确保您没有将“true”传递给 LayoutInflater.inflate(..., boolean) 的 attachToRoot 参数 附加到根) 在 androidx.recyclerview.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6796)

我很困惑,无法找出原因。我该如何解决?

【问题讨论】:

    标签: android android-recyclerview android-adapter android-viewbinding


    【解决方案1】:

    您没有附加 XML,但我遇到了类似的问题,原因是布局的根元素上没有 android:id="@+id/root"。所以,当我引用binding.root 时,它返回了一个带有父视图的视图,这导致了异常。

    【讨论】:

      【解决方案2】:

      确保您已导入正确的 ViewBinding

      import androidx.viewbinding.ViewBinding
      

      如果您遇到错误,请将您的 Gradle 版本升级到最低 7.0.0 类路径'com.android.tools.build:gradle:7.0.0'

      【讨论】:

        猜你喜欢
        • 2021-11-28
        • 1970-01-01
        • 2016-01-07
        • 2020-10-22
        • 1970-01-01
        • 2020-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多