RecyclerView續,下拉刷新與上拉加載
上次寫了RecyclerView的強大,忘了補充好多個問題,今天全部補上。
首先下拉刷新,這個簡單,所以我也只是簡單說說
我一直都是認為谷歌有自帶的框架就不用第三方,所以當然是用SwipeRefreshLayout來下拉刷新
配置下很簡單
mSwipeRefreshLayout.setOnRefreshListener(mOnRefreshListener);
mSwipeRefreshLayout.setColorSchemeResources(R.color.status_bar_bg, R.color.orange, R.color.green);
/**
* 刷新
*/
private SwipeRefreshLayout.OnRefreshListener mOnRefreshListener = new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
pageNum = 1;
mAdapter.clearList();//清楚數據,上一篇文章的事
getData();//獲取數據
}
};
官方控件簡簡單單的下拉刷新就完成了
接下來是上拉加載,別人扔給我的控件
mRecyclerView.addOnScrollListener(mOnScrollListener);
/**
* RecycleView的滑動監聽(加載更多)
*/
private EndlessRecyclerOnScrollListener mOnScrollListener = new EndlessRecyclerOnScrollListener() {
@Override
public void onLoadNextPage(View view) {
super.onLoadNextPage(view);
//下面這是重點,第三個參數是一頁10條(用來控制是否可以繼續下拉),第四個是顯示加載狀態,最后一個可以配置點擊重試請求網絡
RecyclerViewStateUtils.setFooterViewState(Activity.this, mRecyclerView, 10, LoadingFooter.State.Loading, null);
pageNum++;
getData();
}
};
那個設置狀態的幾種類型:
RecyclerViewStateUtils.setFooterViewState(mRecyclerView, LoadingFooter.State.Normal); //加載完成后不顯示的正常狀態
RecyclerViewStateUtils.setFooterViewState(mRecyclerView, LoadingFooter.State.TheEnd);//沒有下一頁的狀態
RecyclerViewStateUtils.setFooterViewState(Activity.this, mRecyclerView, 10, LoadingFooter.State.Loading, null);//加載狀態
接著上EndlessRecyclerOnScrollListener
public class RecyclerViewStateUtils {
/**
* 設置headerAndFooterAdapter的FooterView State
*
* @param instance context
* @param recyclerView recyclerView
* @param pageSize 分頁展示時,recyclerView每一頁的數量
* @param state FooterView State
* @param errorListener FooterView處于Error狀態時的點擊事件
*/
public static void setFooterViewState(Activity instance, RecyclerView recyclerView, int pageSize, LoadingFooter.State state, View.OnClickListener errorListener) {
if(instance==null || instance.isFinishing()) {
return;
}
RecyclerView.Adapter outerAdapter = recyclerView.getAdapter();
if (outerAdapter == null || !(outerAdapter instanceof HeaderAndFooterRecyclerViewAdapter)) {
return;
}
HeaderAndFooterRecyclerViewAdapter headerAndFooterAdapter = (HeaderAndFooterRecyclerViewAdapter) outerAdapter;
//只有一頁的時候,就別加什么FooterView了
if (headerAndFooterAdapter.getInnerAdapter().getItemCount() < pageSize) {
return;
}
LoadingFooter footerView;
//已經有footerView了
if (headerAndFooterAdapter.getFooterViewsCount() > 0) {
footerView = (LoadingFooter) headerAndFooterAdapter.getFooterView();
footerView.setState(state);
if (state == LoadingFooter.State.NetWorkError) {
footerView.setOnClickListener(errorListener);
}
recyclerView.scrollToPosition(headerAndFooterAdapter.getItemCount() - 1);
} else {
footerView = new LoadingFooter(instance);
footerView.setState(state);
if (state == LoadingFooter.State.NetWorkError) {
footerView.setOnClickListener(errorListener);
}
headerAndFooterAdapter.addFooterView(footerView);
recyclerView.scrollToPosition(headerAndFooterAdapter.getItemCount() - 1);
}
}
/**
* 獲取當前RecyclerView.FooterView的狀態
*
* @param recyclerView
*/
public static LoadingFooter.State getFooterViewState(RecyclerView recyclerView) {
RecyclerView.Adapter outerAdapter = recyclerView.getAdapter();
if (outerAdapter != null && outerAdapter instanceof HeaderAndFooterRecyclerViewAdapter) {
if (((HeaderAndFooterRecyclerViewAdapter) outerAdapter).getFooterViewsCount() > 0) {
LoadingFooter footerView = (LoadingFooter) ((HeaderAndFooterRecyclerViewAdapter) outerAdapter).getFooterView();
return footerView.getState();
}
}
return LoadingFooter.State.Normal;
}
/**
* 設置當前RecyclerView.FooterView的狀態
*
* @param recyclerView
* @param state
*/
public static void setFooterViewState(RecyclerView recyclerView, LoadingFooter.State state) {
RecyclerView.Adapter outerAdapter = recyclerView.getAdapter();
if (outerAdapter != null && outerAdapter instanceof HeaderAndFooterRecyclerViewAdapter) {
if (((HeaderAndFooterRecyclerViewAdapter) outerAdapter).getFooterViewsCount() > 0) {
LoadingFooter footerView = (LoadingFooter) ((HeaderAndFooterRecyclerViewAdapter) outerAdapter).getFooterView();
footerView.setState(state);
}
}
}
}
好了上拉加載完成了
建議:加載的時候可以清楚上拉加載的監聽,完成了,確定不是最后一頁了再加上
mRecyclerView.clearOnScrollListeners();
mRecyclerView.addOnScrollListener(mOnScrollListener);
來自:http://www.jianshu.com/p/7fde3ec5a23e
本文由用戶 wholesale010 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!