【问题标题】:RecyclerView lateinit property mClickListener has not been initializedRecyclerView lateinit 属性 mClickListener 没有被初始化
【发布时间】:2021-03-25 16:29:10
【问题描述】:

我找到了一个关于如何将onClickListener 实现为RecyclerView 的教程,但后来我不知道为什么代码不起作用。日志说 lateinit 属性尚未初始化。我不确定它为什么这么说。我将如何解决这个问题?

这是 MainActivity 中的部分代码:

 viewManager = LinearLayoutManager(this)
        val list = ArrayList<test>()
        recyclerView = findViewById<RecyclerView>(R.id.recyclerview).apply {
            setHasFixedSize(true)
            layoutManager = viewManager
            adapter = ListAdapter(list)
        }
        ListAdapter(list).setOnItemClickListener(object : ListAdapter.ClickListener {
            override fun onClick(pos: Int, aView: View) {
                Toast.makeText(applicationContext,"It works :)",Toast.LENGTH_SHORT).show()
            }
        })

【问题讨论】:

  • 尝试用adapter.setOnItemClickListener替换ListAdapter(list).setOnItemClickListener
  • @Astha 它说未解决的参考。我前一阵子试过了,但它不起作用。无论如何,谢谢你帮助我:)
  • adapter的声明并没有在代码中显示,反正问题显然是由于不同的引用。

标签: android kotlin android-recyclerview kotlin-lateinit


【解决方案1】:

这是因为您将侦听器设置在不同的实例上。你应该这样做:

recyclerView = ....apply {
    ...
    adapter = ListAdapter(list).apply {
        setOnItemClickListener(...)
    }
}

另一种可能性是创建一个本地val listAdapter,实例化它并设置监听器,最后,在 RV 的apply 块中,设置adapter = listAdapter

【讨论】:

    猜你喜欢
    • 2022-07-05
    • 2019-12-29
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 2021-06-11
    • 2017-12-25
    相关资源
    最近更新 更多