Generic ListAdapter for Xamarin.Android RecyclerView

I’ll preface this to say I know literally nothing about Android (or mobile, in general) development. I’ve used Xamarin for about 7 hours now and I think it’s neat, but my only goal is to get up a stub of an app to act as a client for the real work, which is a bunch of Azure stuff. This might be useful to someone or it could be a complete Dunning-Kruger moment for me, only time will tell. Proceed with caution.

After reading a bit about ListViews I found out about RecyclerView, which has some cool viewport management stuff to reclaim memory for items you’ve scrolled past while queuing up new items about to come into viewport.

Image from Xamarin blog post [here](https://blog.xamarin.com/recyclerview-highly-optimized-collections-for-android-apps/) Image from Xamarin blog post here

Anyway, I have two collection types for my stub app, Contacts and Conversations. It’s pretty straightforward, but as I was working through the adapter → viewholder stuff, it seems duplicative.

Let’s start

I went though the Xamarin blog post, adapting what was there to my needs and types. I’ve got:

As I started replicating this for a different collection, it dawned on me this is actually a lot of the same code.

If we look at the ContactsAdapter, we see a lot of the same thing:

That’s really about it. Take a look:

Notice there’s really not a whole lot of specific stuff in here. Let’s look at the reusable one:

The only specific stuff we need to know about is

Let’s look at usage — you’ll notice we really just pushed some code around to different places. Here’s our usage in something like MainActivity.cs. Our binding logic has moved to the anonymous method, and we’re explicitly telling our ListAdapter the type of our collection and our ViewHolder.

So far I think Xamarin is pretty neat. I don’t foresee a career shift to mobile development anytime soon but this is at least making it a lot easier! More to come on the Azure bits we’re wiring up here soon.