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 无法正常工作

单击recyclerView中的项目以更改其颜色时出现错误的行为?

单击后退按钮时,在 RecyclerView 中获得相同的项目位置