带有 RecyclerView 单击事件的 MotionLayout 仅在第二次单击后有效
MotionLayout with RecyclerView click events only works after 2nd click
我正在关注此 tutorial and source code 以使用 Motion Layout 实现折叠工具栏。
当您在 recyclerView 上执行 "fast scroll" 然后在 recyclerView 的任何项目上执行单击事件时,此事件仅在您第二次单击后才有效。或者您必须等待 2-3 秒,然后点击事件才起作用。否则点击事件不能发送到 recyclerView。 (假设它等待在 MotionLayout 上完成动画)。我们如何解决这个问题?
任何人都可以通过将以下代码添加到文章源代码的适配器中来模拟该问题。并快速滚动。
class ViewHolder(
view: View,
private val textView: TextView = view.findViewById(android.R.id.text1)
) : RecyclerView.ViewHolder(view) {
var text: CharSequence
get() = textView.text
set(value) {
textView.text = value
}
init {
view.setOnClickListener { showMessage(it) }
}
private fun showMessage(view: View) {
Toast.makeText(view.context, "OnClickListener: item ${adapterPosition + 1}", Toast.LENGTH_SHORT).show()
}
}
将 ConstraintLayout 更新至版本 2.0.0-beta2
我正在关注此 tutorial and source code 以使用 Motion Layout 实现折叠工具栏。 当您在 recyclerView 上执行 "fast scroll" 然后在 recyclerView 的任何项目上执行单击事件时,此事件仅在您第二次单击后才有效。或者您必须等待 2-3 秒,然后点击事件才起作用。否则点击事件不能发送到 recyclerView。 (假设它等待在 MotionLayout 上完成动画)。我们如何解决这个问题?
任何人都可以通过将以下代码添加到文章源代码的适配器中来模拟该问题。并快速滚动。
class ViewHolder(
view: View,
private val textView: TextView = view.findViewById(android.R.id.text1)
) : RecyclerView.ViewHolder(view) {
var text: CharSequence
get() = textView.text
set(value) {
textView.text = value
}
init {
view.setOnClickListener { showMessage(it) }
}
private fun showMessage(view: View) {
Toast.makeText(view.context, "OnClickListener: item ${adapterPosition + 1}", Toast.LENGTH_SHORT).show()
}
}
将 ConstraintLayout 更新至版本 2.0.0-beta2