Щелчок по элементу RecyclerView работает на эмуляторе, но не на физическом в котлине

#java #android #kotlin #android-recyclerview #onitemclick

Вопрос:

у меня есть эта функция для настройки 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)!!)

}
 

Комментарии:

1. Вы хотите установить один clickListener в целом recyclerView ?

2. Сдвиньте «Касание вниз = ложь» ниже «showPatchIbadahDialog(идентификатор)».

3. @Praveen я хочу установить clicklistener для каждого элемента recyclerview, а не clicklistenr для всего recyclerview

4. @AtulYadav ничего не изменилось

5. @Enigma Тогда почему вы не устанавливаете параметры clickListeners для каждого элемента внутри onBindViewHolder ??

Ответ №1:

Вы можете установить clickListeners для каждого элемента вашего recyclerView внутреннего bind метода вашего viewHolder класса.

 class PlannerListhHolder(private val plannerListBinding: PlannerItemBinding) :
            RecyclerView.ViewHolder(plannerListBinding.root) {
            fun bind(plannerItem: PlannerItem) {
                plannerListBinding.root.setOnClickListener {
                    //show your dialog
                }
            }
        }