Невозможно установить onClickListener для элемента в onBindViewHolder - PullRequest
0 голосов
/ 24 января 2020

У меня определена следующая функция onBindViewHolder:

   override fun onBindViewHolder(holder: ViewHolder, position: Int) {

        val item = getItem(position)
        context=this.context
        item.address="Otra dir"
        item.clickListener=View.OnClickListener {
          /* Code to do on clickListener*/
        }
        holder.bind(item)
    }

Все, что я пытаюсь установить в / * Код для clickListener * / никогда не срабатывает.

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

Toast.makeText(this.context,"test",Toast.LENGTH_LONG).show()
            Navigation.findNavController(holder.itemView)
                .navigate(R.id.loginFragment, bundleOf(REQUEST_ID to item.id))

Также пытаюсь показать только тост и т. д.

Но что бы я ни делал, он никогда не реагирует на onClickListener.

С другой стороны, адрес элемента.адрес изменил свой адрес значения на новое значение, отличное от исходного:

Модель для элемента определяется следующим образом:

data class Asset(val id: Int?, val name: String?, var address: String?, var clickListener:View.OnClickListener)

Начальные значения для Актива были определены следующим образом:

 private val resources = LockApp.instance.resources
    init {

        viewModelScope.launch {

            _showLoading.postValue(true)
            delay(3000)
            _assets.postValue(
                listOf(
                    Asset(1, "Nombre 1", "Dirección 1", View.OnClickListener {  }),
                    Asset(2, "Nombre 2", "Dirección 2", View.OnClickListener {  }),
                    Asset(3, "Nombre 3", "Dirección 3", View.OnClickListener {  }),
                    Asset(4, "Nombre 4", "Dirección 4", View.OnClickListener {  }),
                    Asset(5, "Nombre 5", "Dirección 5", View.OnClickListener {  })
                )
            )
            _showLoading.postValue(false)
        }
    }

Как уже говорилось, "Dirección [число]" заменено на "Otra dir", поэтому я не могу gr asp почему "View.OnClickListener {}" не изменяется тем, который я установил.

Что я делаю не так?

1 Ответ

0 голосов
/ 24 января 2020

не делайте его завершенным

Я думаю, это похоже на то, что вы хотите нажать на элемент перкукулера в recyclerView

class Itemsadapter(val onitemclick: Onitemclick) : RecyclerView.Adapter<Itemsviewholder>(){

override fun onBindViewHolder(holder: Itemsviewholder, position: Int) {
        holder.bindto(getItem(position))

    }


inner class Itemsviewholder(val view: View) : RecyclerView.ViewHolder(view) {
        fun bindto(item: Item){
            view.setOnClickListener {
                onitemclick.Onclick(getItem(adapterPosition))
            }
        }

    }
  interface Onitemclick{
      fun Onclick(item: Item)
  }
}

в Activity

class MainActivity : AppCompatActivity(),Itemsadapter.Onitemclick {

override fun onCreate(savedInstanceState: Bundle?){
      val adapter = Itemsadapter(this) // pass this to constructer as interface
      recycle.adapter = adapter //set adapter to recyclerview
 }

  override fun Onclick(item: Item) {
        //do watever
    }

  }

надеюсь, вы поняли идею ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...