DEV Community

Rahul Chowdhury 🕶
Rahul Chowdhury 🕶

Posted on

2 1

Day 9: Display list of elephants

I finally added a RecyclerView to display the list of elephants on the home fragment which is ElephantListFragment.

With a mocktail of ListAdapter, Data Binding and DiffUtil, populating data to the RecyclerView in an efficient way was damn easy.

Here's my sleek adapter:

class ElephantListAdapter : ListAdapter<Elephant, ElephantListAdapter.ViewHolder>(ElephantDiffCallback()) {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val binding = ElephantListItemBinding.inflate(
            LayoutInflater.from(parent.context),
            parent,
            false
        )

        return ViewHolder(binding)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val elephant = getItem(position)
        holder.bind(elephant, createClickListener(elephantName = elephant.name))
    }

    class ViewHolder(
        private val elephantListItemBinding: ElephantListItemBinding
    ) : RecyclerView.ViewHolder(elephantListItemBinding.root) {

        fun bind(item: Elephant, listener: View.OnClickListener) {
            elephantListItemBinding.apply {
                elephant = item
                clickListener = listener
                executePendingBindings()
            }
        }
    }

    private fun createClickListener(elephantName: String): View.OnClickListener {
        return View.OnClickListener {
            val navArgs = Bundle()
            navArgs.putString("elephantName", elephantName)

            it.findNavController().navigate(R.id.elephantProfileFragment, navArgs)
        }
    }
}

private class ElephantDiffCallback : DiffUtil.ItemCallback<Elephant>() {
    override fun areItemsTheSame(oldItem: Elephant, newItem: Elephant): Boolean =
        oldItem.id == newItem.id

    override fun areContentsTheSame(oldItem: Elephant, newItem: Elephant): Boolean =
        oldItem == newItem
}

Polishes can be done here and there which I'll do in some time.

Check out the repo, here: https://github.com/rahulchowdhury/elly

Next, I would like to target UI testing with Espresso. Any handy guide for me?

Sentry blog image

The Visual Studio App Center’s retiring

But sadly….you’re not. See how to make the switch to Sentry for all your crash reporting needs.

Read more

Top comments (0)