RecyclerViewUtils Library Released

Recently, I became tired of writing the same old tedious code for every single RecyclerView and Adpater class I used, that all did the same thing, so I extrapolated all of it into a personal library.

The RecyclerViewUtils library helps make everyone’s life a little easier with a CoreViewHolder and CoreAdapter class, described below.

CoreViewHolder

At the heart of these classes is CoreViewHolder which is a RecyclerView.ViewHolder class used to display an object of a specific type. It has one abstract method for binding an object of that type.

Here is a sample of a CoreviewHolder for Account objects:

   public class AccountViewHolder extends CoreViewHolder<Account> {
      private TextView tvName;
      private TextView tvBalance;
    
      public AccountViewHolder(View view) {
         super(view);
    
         this.tvName = (TextView) view.findViewById(R.id.account_name);
         this.tvBalance = (TextView) view.findViewById(R.id.account_balance);
      }
    
      @Override
         protected void bindItem(Account item) {
         this.tvName.setText(item.getName());
         this.tvBalance.setText(String.valueOf(item.getBalance()));
      }
   }

CoreRecyclerViewAdapter

Using the CoreViewHolder class from above, the CoreRecyclerViewAdapter is an abstract base class for using an adapter of objects with a given type. By using a generic type, we were able to override many boilerplate methods such as:

  • add
  • remove
  • swapItems
  • onBindViewHolder

Thanks to this handy utils class, it cuts down on a ton of boilerplate code inside your adapter, and make it very simple:

   public class AccountAdapter extends CoreRecyclerViewAdapter<Account, AccountAdapter.AccountViewHolder>{
      public AccountAdapter(Context context, List<Account> accounts) {
         super(context, accounts);
      }
    
      @Override
      public AccountViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         return new AccountViewHolder(LayoutInflater.from(context).inflate(R.layout.list_item_account, parent, false));
      }
    
      public class AccountViewHolder extends CoreViewHolder<Account> {
         ...
      }
   }

Adam McNeilly

Adam McNeilly
Adam is a Google Developer Expert for Android. He's been developing apps since 2015, and travels the world to present and learn from other Android engineers.

Interface Naming Conventions

Many engineers will tell you that one of the most complicated responsibilities of our job is naming things. Variables, classes, functions...… Continue reading