RecyclerView 项目单击正在模拟器上工作,但在 kotlin 中的物理上没有
Posted
技术标签:
【中文标题】RecyclerView 项目单击正在模拟器上工作,但在 kotlin 中的物理上没有【英文标题】:RecyclerView item click is working on emulator but not on physical in kotlin 【发布时间】:2021-11-20 05:06:16 【问题描述】:我有这个功能来设置 Recyclerview:
fun setUpRecyclerview()
clickToPatch()
mAdapter.updateData(plannersList)
recyclerView!!.layoutManager =
LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
recyclerView?.adapter = mAdapter
swipeToDelete()
这是点击补丁功能:
fun clickToPatch()
recyclerView?.addOnItemTouchListener(object : RecyclerView.SimpleOnItemTouchListener()
var downTouch = false
override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean
when (e.action)
MotionEvent.ACTION_DOWN -> downTouch = true
MotionEvent.ACTION_UP -> if (downTouch)
downTouch = false
recyclerView!!.findChildViewUnder(e.x, e.y)?.let
val position = rv.getChildAdapterPosition(it)
val id: Int = mAdapter.plannersList?.get(position)!!.id
showPatchIbadahDialog(id)
else -> downTouch = false
return super.onInterceptTouchEvent(rv, e)
)
因此,当我在模拟器中单击该项目时,它工作正常,我可以修补该项目,但是当我尝试在物理手机上单击该项目时,没有任何反应,并且单击该项目没有响应
我在这里做错了什么?
更新:
onBindViewHolder:
override fun onBindViewHolder(holder: ItemBaseViewHolder, position: Int)
holder.bind(plannersList?.get(position)!!)
【问题讨论】:
要设置单个clickListener
整体recyclerView
?
将“downTouch = false”移到“showPatchIbadahDialog(id)”下方。
@Praveen 我想为 recyclerview 的每个项目设置 clicklistener 而不是为整个 recyclerview 设置 clicklistenr
@AtulYadav 没有任何改变
@Enigma 那你为什么不为onBindViewHolder
中的每个项目设置clickListeners
??
【参考方案1】:
您可以在viewHolder
类的bind
方法中为recyclerView
的每个项目设置clickListeners
。
class PlannerListhHolder(private val plannerListBinding: PlannerItemBinding) :
RecyclerView.ViewHolder(plannerListBinding.root)
fun bind(plannerItem: PlannerItem)
plannerListBinding.root.setOnClickListener
//show your dialog
【讨论】:
以上是关于RecyclerView 项目单击正在模拟器上工作,但在 kotlin 中的物理上没有的主要内容,如果未能解决你的问题,请参考以下文章
滚动时单击不在 CoordinatorLayout 中的 RecyclerView 上工作
Android - 在 RecyclerView 中单击的项目上打开新活动 [重复]
单击 Recyclerview 中的项目后,OnItem 单击无法正常工作
单击项目时,Recyclerview onbindview 无法正常工作