簡體   English   中英

如何使用 ViewBinding 為 RecyclerView 創建 BaseAdapter?

[英]How to create BaseAdapter for RecyclerView with ViewBinding?

我想使用 ViewBinding 為 RecyclerView 創建一個 BaseAdapter class,但是當我嘗試以下代碼時:

    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”傳遞給 androidx.recyclerview.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.Z93F725A07423FE1C889F448B33)D21F4 的 LayoutInflater.inflate(..., boolean attachToRoot) 的 attachToRoot 參數

我很困惑,無法找出原因。 我該如何解決?

您沒有附加您的 XML,但我遇到了類似的問題,原因是在布局的根元素上沒有android:id="@+id/root" 因此,當我引用binding.root時,它返回了一個帶有父級的視圖,這導致了異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM