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> {
      ...
   }
}