RecyclerView Adapter Position
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.
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.
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
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.
override fun onIconClickListener(clickedItemPosition: Int) {
when (clickedItemPosition) {
0 -> {
Toast.makeText( requireContext(),"pozisyon $clickedItemPosition ",Toast.LENGTH_SHORT).show()
}
1 -> {
Toast.makeText(requireContext(), "pozisyon $clickedItemPosition ", Toast.LENGTH_SHORT).show()
}
2 -> {
Toast.makeText(requireContext(), "pozisyon $clickedItemPosition ", Toast.LENGTH_SHORT).show()
}
3 -> {
Toast.makeText(requireContext(), "pozisyon $clickedItemPosition ",Toast.LENGTH_SHORT).show()
}
}
}
Ad
Adapterın Tamamı
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
)
}
override fun onBindViewHolder(holder: ExampleViewHolder, position: Int) {
val currentList = list[position]
holder.bind(currentList)
}
override fun getItemCount(): Int = list.size
interface OnItemClickListener {
fun onIconClickListener(clickedItemPosition: Int)
}
}
HomeFragment Tamamı
with(binding!!) {
val list = listOf(
Example(id = 1, name = "Deneme"),
Example(id = 2, name = "Deneme"),
Example(id = 3, name = "Deneme"),
Example(id = 4, name = "Deneme"),
)
exampleAdapter = ExampleAdapter(this@HomeFragment, list)
exampleRecyclerView.apply {
adapter = exampleAdapter
layoutManager = LinearLayoutManager(requireContext())
}
Last updated