SimpleRecyclerAdapter

Additional

Language
Java
Version
0.3.4 (Jul 12, 2017)
Created
Oct 7, 2016
Updated
Jul 12, 2017 (Retired)
Owner
INLOOPX (inloop)
Contributors
Richard Samela (feromakovi)
Juraj Novák (yuraj11)
2
Activity
Badge
Generate
Download
Source code

SimpleRecyclerAdapter

Writing a RecyclerView adapter is a lot of boiler-plate code that is doing the same thing in most cases. This library provides you an universal SimpleRecyclerAdapter, which you can use directly. You can bind any list of arbitrary objects. The adapter was implemented with performance in mind. No new objects are created during the binding process (except for the first visible rows and then the objects are reused).

How to implement

Very easy, to create a new RecyclerViewAdapter, you only need to make an instance of our SimpleRecyclerAdapter (you don't need to extend this class):

mRecyclerAdapter = new SimpleRecyclerAdapter<>(mOnClickListener, new SimpleRecyclerAdapter.CreateViewHolder<MyDataObject>() {
        @Override
        public SettableViewHolder<MyDataObject> onCreateViewHolder(final ViewGroup parent, final int viewType) {
            return new MyDataViewHolder(BasicAdapterActivity.this, R.layout.item_mydata, parent);
        }
});

Then create a standard ViewHolder, extending SettableViewHolder. You only need to implement the setData() method.

public class MyDataViewHolder extends SettableViewHolder<MyDataObject> {

    // constructor omitted

    @Override
    public void setData(@NonNull MyDataObject data) {
        mTitle.setText(data.getTitle());
        mDescription.setText(data.getText());
    }
}

There is also support for multiple clickable areas (see AdvancedDataViewHolder example), multiple view-types, long-press.

Advanced use-case

Take a look at the sample AdvancedAdapterActivity.

The code to achieve this:

@Override
public void onItemClick(@NonNull WrappedMyDataObject item, @NonNull SettableViewHolder<WrappedMyDataObject> viewHolder, @NonNull View view) {
    if (item.getType() == WrappedMyDataObject.ITEM_TYPE_NORMAL) {
        MyDataObject dataObject = item.getDataObject();
        int itemPos = viewHolder.getAdapterPosition();

        switch (view.getId()) {
            case R.id.btn_more:
                setTitle("Action clicked on item: " + dataObject.getTitle());
                break;
            case R.id.btn_remove:
                mRecyclerAdapter.removeItem(item, true);
                break;
            case R.id.btn_move_up:
                mRecyclerAdapter.swapItem(itemPos, Math.max(0, itemPos - 1), true);
                break;
            case R.id.btn_move_down:
                int maxIndex = mRecyclerAdapter.getItemCount() - 1;
                mRecyclerAdapter.swapItem(itemPos, Math.min(maxIndex, itemPos + 1), true);
                break;
            default:
                //Actual item click
                setTitle("Last clicked item: " + dataObject.getTitle());
                break;
        }
    }
}

Download

Grab via Gradle:

compile 'eu.inloop:simplerecycleradapter:0.3.4'