onItemClickListener is unresponsive

Viewed 24

Although I get no error messages when clicking an item on the screen, the app does not move to the next fragment. I have tried basic troubleshooting, such as restarting android studio and rebuilding my project, with no success

Adapter class

class AllCharactersAdapter: RecyclerView.Adapter<AllCharactersAdapter.CharacterViewHolder>() {

inner class CharacterViewHolder(val binding: AllCharactersListItemBinding) :
    RecyclerView.ViewHolder(binding.root)

private val differCallback = object  : DiffUtil.ItemCallback<CharactersItem>() {
    override fun areItemsTheSame( oldItem: CharactersItem, newItem: CharactersItem): Boolean {
        return oldItem.char_id == newItem.char_id
    }

    override fun areContentsTheSame(oldItem: CharactersItem, newItem: CharactersItem): Boolean {
        return oldItem == newItem
    }
}

val differ = AsyncListDiffer(this, differCallback)

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CharacterViewHolder {
    return CharacterViewHolder(
        AllCharactersListItemBinding.inflate(
            LayoutInflater.from(parent.context),
            parent,
            false
        )
    )
}

override fun onBindViewHolder(holder: CharacterViewHolder, position: Int) {
    val binding = holder.binding
    val character = differ.currentList[position]

    holder.itemView.apply {
        Glide.with(this).load(character.img).into(binding.imgCharactersRecyclerViewImage)
        binding.tvCharactersRecyclerViewTitle.text = character.name
        setOnClickListener {
            onItemClickListener?.let { it }
        }
    }
}

override fun getItemCount(): Int {
    return differ.currentList.size
}

private var onItemClickListener: ((CharactersItem) -> Unit)? = null

fun setOnItemClickListener(listener: (CharactersItem) -> Unit) {
    onItemClickListener = listener
}

Fragment's part where onItemClickListener is being used

private fun setupAllCharactersRecyclerView() {
    allCharactersAdapter = AllCharactersAdapter()
    binding.rvAllCharacters.apply {
        adapter = allCharactersAdapter
        layoutManager = LinearLayoutManager(activity)
    }

    allCharactersAdapter.setOnItemClickListener {
        val bundle = Bundle().apply {
            putSerializable("character", it)
        }
        findNavController().navigate(
            R.id.action_allCharactersFragment_to_characterDetailsFragment,
            bundle
        )
    }
}

Any ideas as to why?

0 Answers
Related