Вы можете реализовать интерфейс на вашем ViewHolder, а затем передать реализацию этого интерфейса своему адаптеру из своей деятельности. В вашем адаптере вы передаете реализацию при создании экземпляра CustomViewHolder (метод create).
В вашей деятельности / фрагмент:
private val adapter = YourAdapter(object: CustomViewHolder.Listener {
fun onClick() {
// change the fragment here with the fragment manager of your activity/fragment.
}
})
В вашем адаптере:
class YourAdapter(private val listener: CustomViewHolder.Listener): RecyclerView.Adapter {
...
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return CustomViewHolder(
LayoutInflater.from(context).inflate(R.layout.view_layout, parent, false),
listener
)
}
}
Реализация ViewHolder:
class CustomViewHolder(view: View, private val listener: Listener): ViewHolder(view) {
...
interface Listener {
fun onClick()
}
fun onCreate(parent: View, listener: Listener): CustomViewHolder {
// inflate the view and return an instance of CustomViewHolder
}
fun onBind() {
button.setOnClickListener {
listener.onClick()
}
}
}
Я не тестировал этот код, но логика здесь. Вам просто нужно адаптировать его к вашему проекту.