唉丈屹,好久好久沒寫文章了调俘,簡(jiǎn)直就是罪過,工作忙不是借口泉瞻,自己懶才是真的脉漏,本來中間還有一篇嘮叨的,內(nèi)容也沒啥袖牙,就是工作上忙唄侧巨,不想加班唄,還有累唄鞭达,寫了司忱,但沒發(fā),算了········
正事畴蹭,上次寫了RecyclerView的強(qiáng)大坦仍,忘了補(bǔ)充好多個(gè)問題,今天全部補(bǔ)上叨襟。
首先下拉刷新繁扎,這個(gè)簡(jiǎn)單,所以我也只是簡(jiǎn)單說說
我一直都是認(rèn)為谷歌有自帶的框架就不用第三方糊闽,所以當(dāng)然是用SwipeRefreshLayout來下拉刷新
配置下很簡(jiǎn)單
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();//清楚數(shù)據(jù)梳玫,上一篇文章的事
getData();//獲取數(shù)據(jù)
}
};
官方控件簡(jiǎn)簡(jiǎn)單單的下拉刷新就完成了
接下來是上拉加載,別人扔給我的控件
mRecyclerView.addOnScrollListener(mOnScrollListener);
/**
* RecycleView的滑動(dòng)監(jiān)聽(加載更多)
*/
private EndlessRecyclerOnScrollListener mOnScrollListener = new EndlessRecyclerOnScrollListener() {
@Override
public void onLoadNextPage(View view) {
super.onLoadNextPage(view);
//下面這是重點(diǎn)右犹,第三個(gè)參數(shù)是一頁10條(用來控制是否可以繼續(xù)下拉)提澎,第四個(gè)是顯示加載狀態(tài),最后一個(gè)可以配置點(diǎn)擊重試請(qǐng)求網(wǎng)絡(luò)
RecyclerViewStateUtils.setFooterViewState(Activity.this, mRecyclerView, 10, LoadingFooter.State.Loading, null);
pageNum++;
getData();
}
};
那個(gè)設(shè)置狀態(tài)的幾種類型:
RecyclerViewStateUtils.setFooterViewState(mRecyclerView, LoadingFooter.State.Normal); //加載完成后不顯示的正常狀態(tài)
RecyclerViewStateUtils.setFooterViewState(mRecyclerView, LoadingFooter.State.TheEnd);//沒有下一頁的狀態(tài)
RecyclerViewStateUtils.setFooterViewState(Activity.this, mRecyclerView, 10, LoadingFooter.State.Loading, null);//加載狀態(tài)
接著上EndlessRecyclerOnScrollListener
public class RecyclerViewStateUtils {
/**
* 設(shè)置headerAndFooterAdapter的FooterView State
*
* @param instance context
* @param recyclerView recyclerView
* @param pageSize 分頁展示時(shí)念链,recyclerView每一頁的數(shù)量
* @param state FooterView State
* @param errorListener FooterView處于Error狀態(tài)時(shí)的點(diǎn)擊事件
*/
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;
//只有一頁的時(shí)候盼忌,就別加什么FooterView了
if (headerAndFooterAdapter.getInnerAdapter().getItemCount() < pageSize) {
return;
}
LoadingFooter footerView;
//已經(jīng)有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);
}
}
/**
* 獲取當(dāng)前RecyclerView.FooterView的狀態(tài)
*
* @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;
}
/**
* 設(shè)置當(dāng)前RecyclerView.FooterView的狀態(tài)
*
* @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);
}
}
}
}
好了上拉加載完成了
建議:加載的時(shí)候可以清楚上拉加載的監(jiān)聽积糯,完成了,確定不是最后一頁了再加上
mRecyclerView.clearOnScrollListeners();
mRecyclerView.addOnScrollListener(mOnScrollListener);
唉谦纱,當(dāng)初剛出校園看成,滿腔熱血,現(xiàn)在想買輛單車都買不起服协,怪不得從古代起就辣么多懷才不遇的詩寫出來绍昂,寶寶還是努力干活吧······