Collection of tools for RecyclerView.
This collection was developed with two main goals: easy to code (very simple API) & robust (it really works). Includes:
- Headers, Footers & Sections for
RecyclerView. Based on a common "wrap" adapter. - Extended
SwipeRefreshLayoutto use when Recycler is not direct child (e.g. on CoordinatorLayout) - Implementation of OnItemClickListener for RecyclerView (works standalone or in conjunction with headers, footers & sections).
- FastScrollToTop function.
Seriously couldn't be simpler:
dependencies {
... your other dependencies
compile 'com.eyeem.recyclerviewtools:library:{latest}'
}// create your recycler adapter normally, then wrap it on the wrapper
adapter = new Adapter();
WrapAdapter wrapAdapter = new WrapAdapter(adapter);
// add headers & footers
wrapAdapter.addHeader(header = inflater.inflate(R.layout.overlay_background, recycler, false));
wrapAdapter.addHeader(inflater.inflate(R.layout.header, recycler, false));
wrapAdapter.addFooter(inflater.inflate(R.layout.footer, recycler, false));pass a AbstractSectionAdapter when creating the wrap adapter. The section adapter API is mirrored from RecyclerView (onCreateViewHolder and onBindViewHolder). Feel free to extend from the SimpleSectionAdapter.
SimpleSectionAdapter sections =
new SimpleSectionAdapter(
new int[]{0, 6, 9, 14, 19, 23}) { // those are the section positions
// override here onCreateSectionViewHolder and onBindSectionView
}
WrapAdapter wrapAdapter = new WrapAdapter(adapter, sections);Just call from the original adapter, internally the calls get offset to the proper positions
adapter.notifyItemRangeInserted(start, count); // that's your original adapter// callback to this activity when recycler is at the end (needs to load more)
recycler.addOnScrollListener(new LoadMoreOnScrollListener(this));
// auto call Picasso.pauseTag and resumeTag for smooth scrolling with ImageViews
recycler.addOnScrollListener(new PicassoOnScrollListener(PICASSO_TAG));If using a WrapAdapter you can just pass to a normal setter, or for RecyclerView.Adapter just call .setOnClickListener(detector); during onCreateViewHolder on every View.
position and id get automatically offset, to exclude header, footer and section clicks.
wrapAdapter.setOnItemClickListenerDetector(
new OnItemClickListenerDetector(
recycler, // recycler view
new OnItemClickListenerDetector.OnItemClickListener() { // the detector
@Override public void onItemClick(RecyclerView parent, View view, int position, long id, RecyclerView.ViewHolder viewHolder) { // the callback
// code here ...
}
}));Auto generate or wrap the SpanSizeLookup. Default uses 1 span per item. Header, footer and sections take the whole spanCount.
gridLayoutManager.setSpanSizeLookup(
wrapAdapter.createSpanSizeLookup(spanCount)); // auto-generate SpanSizeLookupthe methods notifyItem* from RecyclerView.Adapter were made final by Google.
So it is impossible to override them on the WrapAdapter to properly adjust their positions before passing to the super class.
So, DO NOT use any notify method from WrapAdapter. Just call from the original adapter.