如何将空构造函数添加到 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<State> = emptyList())
如果你有一个主构造函数(在类名之后声明)所有辅助构造函数(在正文中声明)都需要调用它,因此: this(List<State>)
要求。
请说明想要二级构造函数的原因
【参考方案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 时出错。致命异常:...没有定义无参数构造函数