如何将空构造函数添加到 RecyclerView Adapter android kotlin

Posted

技术标签:

【中文标题】如何将空构造函数添加到 RecyclerView Adapter android kotlin【英文标题】:How can i add empty constructor to RecyclerView Adapter android kotlin 【发布时间】:2021-10-26 01:29:08 【问题描述】:

我需要向我的适配器添加空构造函数,但我已经有了主构造函数。

我的代码:

class RvStatesAdapter(private var stateList: List<State>): RecyclerView.Adapter<RvStatesAdapter.MyViewHolder>() 

inner class MyViewHolder(val binding: RvStateListBinding): RecyclerView.ViewHolder(binding.root)

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder 
    return MyViewHolder(RvStateListBinding.inflate(LayoutInflater.from(parent.context), parent, false))


override fun onBindViewHolder(holder: MyViewHolder, position: Int) 



override fun getItemCount(): Int 
    return stateList.size

我曾尝试使用costructor(): this(),但在这种情况下,我不明白我需要在this() 括号中添加什么

【问题讨论】:

costructor(): this(emptyList()) ?或class RvStatesAdapter(private var stateList: List&lt;State&gt; = emptyList()) 如果你有一个主构造函数(在类名之后声明)所有辅助构造函数(在正文中声明)都需要调用它,因此: this(List&lt;State&gt;) 要求。 请说明想要二级构造函数的原因 【参考方案1】:

您可以通过在主构造函数中使用函数在适配器中提交列表而不是传递列表来制作没有参数的适配器构造函数。

class RvStatesAdapter(): RecyclerView.Adapter<RvStatesAdapter.MyViewHolder>() 

    private val stateList: ArrayList<State> = ArrayList<State>()

    /**
     *  submit list to recycler view adapter for populating items
     */
    fun submitList(list: List<State>) 
        stateList.addAll(list)
    

    inner class MyViewHolder(val binding: RvStateListBinding) :
        RecyclerView.ViewHolder(binding.root)

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder 
        return MyViewHolder(
            RvStateListBinding.inflate(
                LayoutInflater.from(parent.context),
                parent,
                false
            )
        )
    

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) 

    

    override fun getItemCount(): Int 
        return stateList.size
    


使用适配器实例提交列表

val list = emptyList<State>()
val rvStatesAdapter = RvStatesAdapter()
// init recyclerview properties
rvStatesAdapter.submitList(list)

【讨论】:

以上是关于如何将空构造函数添加到 RecyclerView Adapter android kotlin的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 Firebase 提取到 RecyclerView 时出错。致命异常:...没有定义无参数构造函数

new的实现机制

将空图添加到构面,并与另一个构面结合

理解js中是原型链? 如何实现继承?

在 RecyclerView 中使用多个视图类型时如何将项目添加到所需的 ViewHolder 位置?

RecyclerView系列:GridLayoutManager的构造函数中的orientation理解