You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin如何为已有主构造函数的RecyclerView Adapter添加空构造函数

解决方案

提供两种可直接落地的实现方式:

方案1:给主构造参数添加默认值(最简洁)

直接修改主构造声明,给stateList设置默认值为emptyList(),Kotlin会自动生成对应的无参构造函数,无需额外写次级构造:

// 修改后的类声明
class RvStatesAdapter(private var stateList: List<State> = emptyList()): 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
    }
    
    // 建议补充数据更新方法,方便后续动态修改列表内容
    fun updateData(newStateList: List<State>) {
        this.stateList = newStateList
        notifyDataSetChanged()
        // 对性能有要求可以替换为DiffUtil实现局部更新
    }
}

方案2:显式声明次级无参构造

如果你不想修改原主构造的定义,单独新增次级构造即可,this()括号内直接传入空列表作为初始的stateList参数:

class RvStatesAdapter(private var stateList: List<State>): RecyclerView.Adapter<RvStatesAdapter.MyViewHolder>() {
    // 新增次级无参构造
    constructor() : this(emptyList())

    // 原有代码保持不变
    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
    }

    // 同样建议补充上面的updateData更新方法
}

原理解释

你的主构造函数要求传入List<State>类型的stateList参数,次级构造调用主构造时只需要传入符合类型要求的参数即可。空构造场景下没有外部传入的列表数据,传入emptyList()生成的不可变空列表作为初始值即可,后续需要加载数据时调用更新方法替换列表内容就行。

内容的提问来源于stack exchange,提问作者onesector

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:54:01