Öncelikle istenilen koşulu hatırlayalım, recyclerview içerisindeki listenin pozisyonuna erişip sadece bir item' a tıklama event' i eklemekti.
Bunun için adapter içerisinde bir OnItemClickListener adında interface oluşturuyorum ve bunun içerisine de holder tarafında vereceğimiz adapter pozisyonu için parametre atıyorum.
ExampleAdapter.kt
interface OnItemClickListener {
fun onIconClickListener(clickedItemPosition: Int)
}
bu sefer viewholder tarafında da vermemiz gerekiyor ve tasarım kısmında imageview' a tıklanıldığında adapter içerisindeki posizyonu da vermiş oluyoruz.
ExampleAdapter.kt
class ExampleAdapter(
private val listener: OnItemClickListener,
private val list: List<Example>
) : RecyclerView.Adapter<ExampleAdapter.ExampleViewHolder>() {
class ExampleViewHolder(
private val binding: CustomExampleRowBinding,
private val listener: OnItemClickListener
) : ViewHolder(binding.root) {
fun bind(example: Example) {
with(binding) {
exampleTextView.text = example.name
exampleImageView.setOnClickListener {
listener.onIconClickListener(adapterPosition)
}
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ExampleViewHolder {
return ExampleViewHolder(
CustomExampleRowBinding.inflate(
LayoutInflater.from(parent.context), parent, false
), listener
)
}
}
Şimdi fragmente bu adapterdaki listeneri tanımlayarak override edelim
HomeFragment.kt
class HomeFragment : Fragment(), ExampleAdapter.OnItemClickListener {}
Geriye aldığımız pozisyona göre yapacağımız eylemleri yazmak kalıyor. İster logout yaparsın ister detay sayfasına gidersin. Spesifik bir item'a erişmeyi bu şekilde yapabildim.