【问题标题】:Kotlin - Recycleview ViewHolder OnClick not workingKotlin - Recyclerview ViewHolder OnClick 不起作用
【发布时间】:2018-07-11 03:50:42
【问题描述】:

我有一个由另一位开发人员在 Kotlin 中完成的应用程序。它在 RecycleView Adapter 的“onBindViewHolder”方法中设置 Onclick 监听器。在视图滚动出可见区域(即用户向下滚动)并且用户滚动回到顶部之后,onclick 方法仅在视图被点击两次后才会被调用。不明白怎么回事,我的Kotlin知识也很少。这是 onclick 监听器的设置方式:

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
//...
    holder.itemView.editButton.onClick {
                Log.d("Holder", "Click")

    }
//...

}

当视图离开屏幕时,它正在工作。此外,对于刚从屏幕外返回的视图,不会调用 onBindViewholder,我相信这不是标准的吗?

recycleview也没有什么特别的设置,只是简单的线性布局和单一的view类型。

有什么想法吗?

【问题讨论】:

  • Kotlin 在 Android Core 类用例中没有任何区别,它在语法上与 java 不同。您应该发布适配器的整个代码。
  • 你在用kotlin synthetic吗?
  • 在您的自定义 ViewHolder 构造函数中调用您的 holder.itemView.editButton.onClick,而不是在 onBindViewHolder 方法中调用
  • 我的错,问题可能与 Recycleview 位于 CoordinatorLayout 内的事实有关。仍然是一个非常奇怪的问题
  • CoordinatorLayout 与它无关 - 只需设置您的 OnClickListener 内部视图持有者构造函数

标签: android android-recyclerview kotlin onclicklistener


【解决方案1】:

试试这个代码。

holder.itemView.editButton.setOnClickListener(object : View.OnClickListener {
            override fun onClick(v: View?) {
               Log.d("Holder", "Click")
            }
        })

【讨论】:

    【解决方案2】:

    确保将edittext的值与ViewHolder类绑定,如下所示

    class ViewHolder (view: View) : RecyclerView.ViewHolder(view) {
        // Holds the button that will add each editButton to
        val editButton = view.editButton
    }
    

    试试这个简单的代码后

        holder?.editButton.setOnClickListener {
            Log.e("editbutton", "onClick")
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多