ClearRecyclerAdapter

Additional

Language
Java
Version
N/A
Created
Jul 18, 2016
Updated
Jul 22, 2016 (Retired)
Owner
Alexander Roman (Prokky)
Contributor
Alexander Roman (Prokky)
1
Activity
Badge
Generate
Download
Source code

ClearRecyclerAdapter

Boilerplate code free Adapter for RecyclerView. Now supports different states for easy handling errors/progress.

##Usage To include this library to your project add dependency in build.gradle file:

dependencies {
    compile 'com.prokkypew:clearrecycleradapter:1.1.0'
}

###ClearRecyclerAdapter Create your Adapter class which extends ClearRecyclerAdapter and implement some functions.

public class YourAdapter extends ClearRecyclerAdapter<YourObject> {
    @Override
    protected ClearRecyclerViewHolder getViewHolder(View view, int viewType) {
        return new YourViewHolder(view);
    }

    @Override
    protected int getItemLayoutId(int viewType) {
        return R.layout.your_list_item;
    }

    public class YourViewHolder extends ClearRecyclerAdapter.ClearRecyclerViewHolder<YourObject> {
        @BindView(R.id.title)
        TextView titleText;

        public YourViewHolder(View itemView) {
            super(itemView);
            Butterknife.bind(this, v); //just do it any way you like
        }

        @Override
        public void bind(YourObject item) {
            titleText.setText(item.name); //onBindViewHolder code here
        }
    }
}

Modify data int the adapter with this:

adapter.set(List<T> items);
adapter.addAll(List<T> items);
adapter.add(T item);
adapter.add(T item, int position);
adapter.update(T item);
adapter.remove(T item);
adapter.clear();
List<T> items = adapter.getItems();

If you need the View types for your adapter, feel free to use viewType parameter in getViewHolder(View, int) and getItemLayoutId(int) functions. Don't forget to override getItemViewType(int) int your adapter:

    @Override
    protected ClearRecyclerViewHolder getViewHolder(View view, int viewType) {
        switch(viewType){
            case FIRST: return new FirstViewHolder(view);
            case SECOND:
            default: return new SecondViewHolder(view);
        }
    }

    @Override
    protected int getItemLayoutId(int viewType) {
        switch(viewType){
            case FIRST: return R.layout.first_layout;
            case SECOND:
            default: return R.layout.second_layout;
        }
    }
    @Override
    public int getItemViewType(int position) {
        // return viewtype for position
    }

###StateRecyclerAdapter If you want easy progress/error states in your RecyclerView, simply extend StateRecyclerAdapter and implement its functions.

public class SampleStateAdapter extends StateRecyclerAdapter<SampleObject> {

    @Override
    public int getErrorLayoutId() {
        return R.layout.sample_error_layout;
    }

    @Override
    protected int getItemLayoutId(int viewType) {
        return R.layout.sample_item_layout;
    }

    @Override
    public int getProgressLayoutId() {
        return R.layout.sample_progress_layout;
    }

    @Override
    protected ClearRecyclerViewHolder getViewHolder(View view, int viewType) {
        return new SampleViewHolder(view);
    }
}

Then just make some calls for changing state, and you'll see your progress/error/item view show.

    adapter.setState(StateRecyclerAdapter.AdapterState.ERROR);
    adapter.setState(StateRecyclerAdapter.AdapterState.ITEMS);
    adapter.setState(StateRecyclerAdapter.AdapterState.PROGRESS);

And you are done!

License

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.