Kotlin:从RecyclerView Activity向Adapter传数组报错求助
解决RecyclerView Adapter传递数组的问题
嘿,刚接触Kotlin遇到这种问题很正常,我来帮你捋清楚~你遇到的红色错误提示“Too many arguments for public constructor...”,核心原因是你的SecondAdapter没有定义能接收数组的构造函数,当你在Activity里传content数组给它时,Adapter找不到对应的构造方法,所以报错了。
第一步:修改Adapter的构造函数
你需要给SecondAdapter添加一个接收数组的构造函数,把外部传入的数组直接作为Adapter的数据源。修改后的Adapter代码如下:
class SecondAdapter(private val lessons: Array<String>) : RecyclerView.Adapter<SecondCustomViewHolder>() { // 不需要再单独声明默认的lessons数组了,直接用构造函数传入的参数 override fun getItemCount(): Int { return lessons.size } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SecondCustomViewHolder { val layoutInflater = LayoutInflater.from(parent.context) val cellForRow = layoutInflater.inflate(R.layout.lesson_row, parent, false) return SecondCustomViewHolder(cellForRow) } override fun onBindViewHolder(holder: SecondCustomViewHolder, position: Int) { // 这里可以补充代码,把数组里的内容绑定到ViewHolder的控件上 // 比如你的item布局里有个TextView,id是tv_lesson_content,就可以这么写: // holder.viewTwo.findViewById<TextView>(R.id.tv_lesson_content).text = lessons[position] } } class SecondCustomViewHolder(var viewTwo: View) : RecyclerView.ViewHolder(viewTwo)
第二步:验证Activity里的传递代码
现在你的Adapter已经支持接收数组参数了,Activity里原来的传递代码:
recyclerView_main.adapter = SecondAdapter(content)
就可以正常运行,不会再报错啦!
额外小建议(针对Kotlin新手)
Kotlin里更推荐使用List<String>代替Array<String>,因为默认的List是不可变的,更安全且使用起来更灵活。如果要改成List的话:
- Activity里的content改成用
listOf()创建:
var content: List<String> = if (navBarTitle == "Introduction") { listOf("Intro1", "Intro2") } else { listOf("Lesson1-1", "Lesson 1-2") }
- Adapter的构造函数改成接收List:
class SecondAdapter(private val lessons: List<String>) : RecyclerView.Adapter<SecondCustomViewHolder>() { // 其他代码不变,getItemCount还是return lessons.size }
这样你的代码会更符合Kotlin的最佳实践哦~
内容的提问来源于stack exchange,提问作者Joe Shamuraq
相关产品推荐
相关产品推荐

