Передача данных из адаптера
Необходимо передать список выделенных объектов из адаптера ListView в Activity.
В адаптере
var onItemClick: ((pos: ArrayList<Int>) -> Unit)? = null
holder.checkBox.setOnClickListener(View.OnClickListener() {
arrayList[position].select = holder.checkBox.isChecked
val selectPos = ArrayList<Int>() // Список выбранных CheckBox
val count = arrayList.size
if (count > 0) {
var check = false
for (i in 0 until count) {
check = arrayList[i].select
if (check)
selectPos.add(i)
}
}
onItemClick?.invoke(selectPos) // оправьте ваши данные
Log.d(TAG, "selectPos: $selectPos")
})
В Activity
listView.setOnItemClickListener { _, _, position, _ ->
Log.d(TAG, "position: $position")
adapter.onItemClick = { pos ->
Log.d(TAG, "Список: $pos")
}
}
При нажатии CheckBox, слушатель adapter.onItemClick не работает. После нажатия всей строки, слушатель начинает работать.
Как сделать, чтобы слушатель работал сразу?
Ответы (2 шт):
Автор решения: Wlad
→ Ссылка
Все ваши слушатели должны находится уже в Адптере в методе onCreateViewHolder.
и уже там вам надо прпоисать, что будет при обычном нажатии на Item
holder.itemView.setOnClickListener{
// код
или при нажатии на определенный элемент Item'а
holder.itemView.findViewById<ImageView>(R.id.delete).setOnClickListener {
// код
}
Автор решения: Юрий
→ Ссылка
Мне надо в Activity поймать срабатывание CheckBox.
Все работает
listView.setOnItemClickListener { _, _, position, _ ->
Log.d(TAG, "position: $position")
}
adapter.onItemClick = { pos ->
Log.d(TAG, "Список: $pos")
}
Всем спасибо.