HeaderAndFooterRecyclerView是支持addHeaderView、 addFooterView、分頁加載數據的RecyclerView。git
它能夠對 RecyclerView 控件進行拓展,給RecyclerView增長HeaderView、FooterView,而且不須要對你的Adapter作任何修改。github
同時,經過修改FooterView State,能夠動態爲FooterView賦予不一樣狀態(加載中、加載失敗、滑到最底等),能夠實現RecyclerView分頁加載數據時的loading/theEnd/NetWorkError效果。web
https://github.com/cundong/HeaderAndFooterRecyclerViewless
添加HeaderView、FooterViewide
mHeaderAndFooterRecyclerViewAdapter = new HeaderAndFooterRecyclerViewAdapter(mDataAdapter); mRecyclerView.setAdapter(mHeaderAndFooterRecyclerViewAdapter); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); //add a HeaderView RecyclerViewUtils.setHeaderView(mRecyclerView, new SampleHeader(this)); //add a FooterView RecyclerViewUtils.setFooterView(mRecyclerView, new SampleFooter(this));
LinearLayout/GridLayout/StaggeredGridLayout佈局的RecyclerView分頁加載佈局
mRecyclerView.addOnScrollListener(mOnScrollListener);
private EndlessRecyclerOnScrollListener mOnScrollListener = new EndlessRecyclerOnScrollListener() { @Override public void onLoadNextPage(View view) { super.onLoadNextPage(view); LoadingFooter.State state = RecyclerViewStateUtils.getFooterViewState(mRecyclerView); if(state == LoadingFooter.State.Loading) { Log.d("@Cundong", "the state is Loading, just wait.."); return; } mCurrentCounter = mDataList.size(); if (mCurrentCounter < TOTAL_COUNTER) { // loading more RecyclerViewStateUtils.setFooterViewState(EndlessLinearLayoutActivity.this, mRecyclerView, REQUEST_COUNT, LoadingFooter.State.Loading, null); requestData(); } else { //the end RecyclerViewStateUtils.setFooterViewState(EndlessLinearLayoutActivity.this, mRecyclerView, REQUEST_COUNT, LoadingFooter.State.TheEnd, null); } } };
添加HeaderView、FooterViewthis
支持分頁加載的LinearLayout佈局RecyclerViewspa
支持分頁加載的GridLayout佈局RecyclerViewcode
支持分頁加載的StaggeredGridLayout佈局RecyclerVieworm