инициализация держателя для onItemClick не работает - PullRequest
0 голосов
/ 27 февраля 2020

Я изучаю вопрос о том, как правильно добавить событие onClick в мой просмотр,

В настоящее время я использую интерфейс внутри моего customAdapter

class CategoryAdapter(val categoryList : List<CategoryObject>, val context: Context, val mItemClickListener: MainInterface) : RecyclerView.Adapter<CategoryAdapter.ViewHolder>() {

interface MainInterface {
    fun onCategoryItemClick(categoryKey: Int)
}

override fun getItemCount(): Int {
    return categoryList.size
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    return ViewHolder(LayoutInflater.from(context).inflate(R.layout.listview_category, parent, false))
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    holder?.categoryName?.text = categoryList[position].categoryName
//        holder?.categoryName.setOnClickListener{
//            mItemClickListener.onCategoryItemClick(position)
//        }
//        holder?.categoryName?.setOnClickListener { listener(categoryList[position]) }
}

inner class ViewHolder (view: View) : RecyclerView.ViewHolder(view) {
    val categoryName = view.lv_txt_category_name

    init {
        view.setOnClickListener {
            mItemClickListener.onCategoryItemClick(adapterPosition)
        }
    }
}

}  

onClick viewHolder не регистрируется в моей деятельности функция ovveride.

но размещение onClick внутри onBindViewHolder работает отлично,

Я не уверен, что более эффективно, если onBindViewHolder onClick - правильный ответ, тогда я буду придерживаться его, но если viewHolder правильный, почему он не работает должным образом?

Заранее спасибо!

Обновление
Это сообщение о потоке стека, которое я использую для исследования вещей

RecyclerView itemClickListener в Kotlin

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

Как предлагается в документации для:

RecyclerView.Adapter.html # onBindViewHolder

Вызывается RecyclerView для отображения данных в указанной позиции. Этот метод должен обновить содержимое itemView, чтобы отразить элемент в данной позиции.

И для RecyclerView.Adapter.html # onCreateViewHolder

Вызывается, когда RecyclerView требуется новый RecyclerView.ViewHolder данного типа для представления элемента.

Этот новый ViewHolder должен быть создан с новым представлением, которое может представлять элементы данного типа. Вы можете создать новый вид вручную или накачать его из файла макета XML.

Поскольку onCreateViewHolder - это метод, в котором мы возвращаем тип из ViewHolder только в то время как в onBindViewHolder мы обновляем или инициализируем данные для отображения.

Это означает, что данные не связаны в onCreateViewHolder, и привязка чего-либо в этом методе не будет иметь никакого значения. эффект.

0 голосов
/ 27 февраля 2020

пробовал android: clickable = "true" в вашем xml?

...