支持addHeaderView、 addFooterView、以及分頁加載數據的RecyclerView
介紹
HeaderAndFooterRecyclerView是支持addHeaderView、 addFooterView、分頁加載數據的RecyclerView。
它可以對 RecyclerView 控件進行拓展,給RecyclerView增加HeaderView、FooterView,并且不需要對你的Adapter做任何修改。
同時,通過修改FooterView State,可以動態為FooterView賦予不同狀態(加載中、加載失敗、滑到最底等),可以實現RecyclerView分頁加載數據時的loading/theEnd/NetWorkError效果。
使用
- 添加HeaderView、FooterView
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); } } };
注意事項
如果已經使用RecyclerViewUtils.setHeaderView(mRecyclerView, view);為RecyclerView添加了HeaderView,那么再調用ViewHolder類的getAdapterPosition()、getLayoutPosition()時返回的值就會因為增加了Header而受影響(返回的position等于真實的position+headerCounter)。
因此,這種情況下請使用RecyclerViewUtils.getAdapterPosition(mRecyclerView, ViewHolder.this)、RecyclerViewUtils.getLayoutPosition(mRecyclerView, ViewHolder.this)兩個方法來替代。
Demo
- 添加HeaderView、FooterView
- 支持分頁加載的LinearLayout布局RecyclerView
- 支持分頁加載的GridLayout布局RecyclerView
- 支持分頁加載的StaggeredGridLayout布局RecyclerView
- 分頁加載失敗時的GridLayout布局RecyclerView
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!