Skip to content

ArrayAdapter,pull to refresh,auto load more,Header/Footer,EmptyView,ProgressView,ErrorView

Notifications You must be signed in to change notification settings

imagegithub/EasyRecyclerView

Repository files navigation

EasyRecyclerView

中文English

Encapsulate many API about RecyclerView into the library,such as arrayAdapter,pull to refresh,auto load more,no more and error in the end,header&footer.
The library uses a new usage of ViewHolder,decoupling the ViewHolder and Adapter.
Adapter will do less work,adapter only direct the ViewHolder,if you use MVP,you can put adapter into presenter.ViewHolder only show the item,then you can use one ViewHolder for many Adapter.
Part of the code modified from Malinskiy/SuperRecyclerView,make more functions handed by Adapter.

Dependency

compile 'com.jude:easyrecyclerview:4.4.2'

ScreenShot

recycler.gif

Usage

EasyRecyclerView

<com.jude.easyrecyclerview.EasyRecyclerView android:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="match_parent"app:layout_empty="@layout/view_empty"app:layout_progress="@layout/view_progress"app:layout_error="@layout/view_error"app:recyclerClipToPadding="true"app:recyclerPadding="8dp"app:recyclerPaddingTop="8dp"app:recyclerPaddingBottom="8dp"app:recyclerPaddingLeft="8dp"app:recyclerPaddingRight="8dp"app:scrollbarStyle="insideOverlay"//insideOverlay or insideInset or outsideOverlay or outsideInset app:scrollbars="none"//none or vertical or horizontal />

Attention EasyRecyclerView is not a RecyclerView just contain a RecyclerView.use 'getRecyclerView()' to get the RecyclerView;

EmptyView&LoadingView&ErrorView
xml:

app:layout_empty="@layout/view_empty" app:layout_progress="@layout/view_progress" app:layout_error="@layout/view_error"

code:

voidsetEmptyView(ViewemptyView) voidsetProgressView(ViewprogressView) voidsetErrorView(ViewerrorView)

then you can show it by this whenever:

voidshowEmpty() voidshowProgress() voidshowError() voidshowRecycler()

scrollToPosition

voidscrollToPosition(intposition); // such as scroll to top

control the pullToRefresh

voidsetRefreshing(booleanisRefreshing); voidsetRefreshing(finalbooleanisRefreshing, finalbooleanisCallback); //second params is callback immediately

##RecyclerArrayAdapter
there is no relation between RecyclerArrayAdapter and EasyRecyclerView.you can user any Adapter for the EasyRecyclerView,and use the RecyclerArrayAdapter for any RecyclerView.

Data Manage

voidadd(Tobject); voidaddAll(Collection<? extendsT> collection); voidaddAll(T ... items); voidinsert(Tobject, intindex); voidupdate(Tobject, intindex); voidremove(Tobject); voidclear(); voidsort(Comparator<? superT> comparator);

Header&Footer

voidaddHeader(ItemViewview) voidaddFooter(ItemViewview) 

ItemView is not a view but a view creator;

publicinterfaceItemView{ViewonCreateView(ViewGroupparent); voidonBindView(ViewitemView)}

The onCreateView and onBindView correspond the callback in RecyclerView's Adapter,so adapter will call onCreateView once and onBindView more than once;
It recommend that add the ItemView to Adapter after the data is loaded,initialization View in onCreateView and nothing in onBindView.

Header and Footer support LinearLayoutManager,GridLayoutManager,StaggeredGridLayoutManager.
In GridLayoutManager you must add this:

//make adapter obtain a LookUp for LayoutManager,param is maxSpan。gridLayoutManager.setSpanSizeLookup(adapter.obtainGridSpanSizeLookUp(2));

OnItemClickListener&OnItemLongClickListener

adapter.setOnItemClickListener(newRecyclerArrayAdapter.OnItemClickListener(){@OverridepublicvoidonItemClick(intposition){//position not contain Header } }); adapter.setOnItemLongClickListener(newRecyclerArrayAdapter.OnItemLongClickListener(){@OverridepublicbooleanonItemLongClick(intposition){returntrue} });

equal 'itemview.setOnClickListener()' in ViewHolder.
if you set listener after RecyclerView has layout.you should use 'notifyDataSetChange()';

###the API below realized by add a Footer。

LoadMore

voidsetMore(finalintres,OnMoreListenerlistener); voidsetMore(finalViewview,OnMoreListenerlistener);

Attention when you add null or the length of data you add is 0 ,it will finish LoadMore and show NoMore;
also you can show NoMore manually adapter.stopMore();

LoadError

voidsetError(finalintres,OnErrorListenerlistener) voidsetError(finalViewview,OnErrorListenerlistener)

use adapter.pauseMore() to show Error,when your loading throw an error;
if you add data when showing Error.it will resume to load more;
when the ErrorView display to screen again,it will resume to load more too,and callback the OnLoadMoreListener(retry).
adapter.resumeMore()you can resume to load more manually,it will callback the OnLoadMoreListener immediately.
you can put resumeMore() into the OnClickListener of ErrorView to realize click to retry.

NoMore

voidsetNoMore(finalintres,OnNoMoreListenerlistener) voidsetNoMore(finalViewview,OnNoMoreListenerlistener)

when loading is finished(add null or empty or stop manually),it while show in the end.

BaseViewHolder<M>

decoupling the ViewHolder and Adapter,new ViewHolder in Adapter and inflate view in ViewHolder.
Example:

publicclassPersonViewHolderextendsBaseViewHolder<Person>{privateTextViewmTv_name; privateSimpleDraweeViewmImg_face; privateTextViewmTv_sign; publicPersonViewHolder(ViewGroupparent){super(parent,R.layout.item_person); mTv_name = $(R.id.person_name); mTv_sign = $(R.id.person_sign); mImg_face = $(R.id.person_face)} @OverridepublicvoidsetData(finalPersonperson){mTv_name.setText(person.getName()); mTv_sign.setText(person.getSign()); mImg_face.setImageURI(Uri.parse(person.getFace()))} } ----------------------------------------------------------------------- publicclassPersonAdapterextendsRecyclerArrayAdapter<Person>{publicPersonAdapter(Contextcontext){super(context)} @OverridepublicBaseViewHolderOnCreateViewHolder(ViewGroupparent, intviewType){returnnewPersonViewHolder(parent)} }

Decoration

Now there are three commonly used decoration provide for you.
DividerDecoration
Usually used in LinearLayoutManager.add divider between items.

DividerDecorationitemDecoration = newDividerDecoration(Color.GRAY, Util.dip2px(this,0.5f), Util.dip2px(this,72),0);//color & height & paddingLeft & paddingRightitemDecoration.setDrawLastItem(true);//sometimes you don't want draw the divider for the last item,default is true.itemDecoration.setDrawHeaderFooter(false);//whether draw divider for header and footer,default is false.recyclerView.addItemDecoration(itemDecoration);

this is the demo:

SpaceDecoration
Usually used in GridLayoutManager and StaggeredGridLayoutManager.add space between items.

SpaceDecorationitemDecoration = newSpaceDecoration((int) Utils.convertDpToPixel(8,this));//params is heightitemDecoration.setPaddingEdgeSide(true);//whether add space for left and right adge.default is true.itemDecoration.setPaddingStart(true);//whether add top space for the first line item(exclude header).default is true.itemDecoration.setPaddingHeaderFooter(false);//whether add space for header and footer.default is false.recyclerView.addItemDecoration(itemDecoration);

this is the demo:

StickHeaderDecoration
Group the items,add a GroupHeaderView for each group.The usage of StickyHeaderAdapter is the same with RecyclerView.Adapter. this part is modified from edubarr/header-decor

StickyHeaderDecorationdecoration = newStickyHeaderDecoration(newStickyHeaderAdapter(this)); decoration.setIncludeHeader(false); recyclerView.addItemDecoration(decoration);

for example:

for detail,see the demo

License

Copyright 2015 Jude 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. 

About

ArrayAdapter,pull to refresh,auto load more,Header/Footer,EmptyView,ProgressView,ErrorView

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java100.0%