#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
}
}
}