Android Kotlin - Как назначить функцию имени в основном классе активности для setOnClickListener в другом классе? - PullRequest
0 голосов
/ 06 января 2020

Пожалуйста, проверьте образец кода и комментарии ниже,

class MainActivity : AppCompatActivity(), MyListener {
  fun OnViewItemClicked(){
    // do something
  }
}

class AnotherClass() : RecyclerView.Adapter<MyAdapter.ViewHolder>() {
  override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    // how do i set this to OnViewItemClicked declared in class MainActivity?
    holder.itemView.setOnClickListener(OnViewItemClicked);
  }
}

1 Ответ

3 голосов
/ 06 января 2020

Просто передайте Listener instance в адаптер: - как: -

val adapter = AnotherClass(this@MainActivity)

Затем в адаптере

class AnotherClass(private val listener: MainActivity): RecyclerView.Adapter<MyAdapter.ViewHolder>() {
     ....
     ....
     holder.itemView.setOnClickListener {
         listener.OnViewItemClicked()
     }
     ....
 }

Объяснение - Это делается с помощью помощь kotlin lambda, т. е. эквивалентна: -

val clickLambda: (View) -> Unit = {
    listener.OnViewItemClicked()
}

Edit : - Вместо этого вы можете напрямую передать лямбду типа (View) -> Unit из действия !

...