github地址(Demo下載)
https://github.com/zhouxu88/PullToRefreshRecyclerView
一、簡介
RefreshRecyclerView:支持帶上拉加載更多、下拉刷新(刷新樣式可自定義)、emptyview的RecyclerView
效果:
Paste_Image.png
二、使用步驟
1、import module依賴:pulltorefreshlibrary(在Demo中有,自行下載)
2、在布局文件中將以前使用RecyclerView的地方地換成PullToRefreshRecyclerView控件(說白了,這也是一個自定義RecyclerView)
<com.androidkun.PullToRefreshRecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
3. 初始化PullToRefreshRecyclerView并設(shè)置屬性和下拉刷新和上拉加載更多的回調(diào)
//初始化RecyclerView的配置及上拉加載,下拉刷新
private void initRecyclerView() {
recyclerView = (PullToRefreshRecyclerView) findViewById(R.id.recyclerView);
//添加HeaderView
View headView = View.inflate(this, R.layout.layout_head_view, null);
recyclerView.addHeaderView(headView);
//添加HeaderView
View headView2 = View.inflate(this, R.layout.layout_head2_view, null);
recyclerView.addHeaderView(headView2);
//添加FooterView
View footerView = View.inflate(this, R.layout.layout_foot_view, null);
recyclerView.addFooterView(footerView);
//設(shè)置EmptyView
View emptyView = View.inflate(this, R.layout.layout_empty_view, null);
emptyView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
recyclerView.setEmptyView(emptyView);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
adapter = new RecyclerViewAdapter(this, data);
recyclerView.setAdapter(adapter);
//設(shè)置是否開啟上拉加載
recyclerView.setLoadingMoreEnabled(true);
//設(shè)置是否開啟下拉刷新
recyclerView.setPullRefreshEnabled(true);
//設(shè)置是否顯示上次刷新的時間
recyclerView.displayLastRefreshTime(true);
//設(shè)置刷新回調(diào)
recyclerView.setPullToRefreshListener(this);
//主動觸發(fā)下拉刷新操作
//recyclerView.onRefresh();
}
如果想使用網(wǎng)格列表,則相應(yīng)設(shè)置布局管理者為網(wǎng)格布局管理者就行了
GridLayoutManager gridLayoutManager = new GridLayoutManager(this,2);
recyclerView.setLayoutManager(gridLayoutManager);
備注:此外也可以通過 setRefreshingResource(int resId)setLoadMoreResource(int resId),這個resId是本地圖片的id,來實現(xiàn)自定義刷新箭頭和加載的圖標。當然了要想實現(xiàn)更復(fù)雜的自定義刷新樣式,比如其他動畫效果,只有進入依賴的pulltorefreshlibrary模塊中設(shè)置了,這也是為什么筆者用模塊依賴的原因,可以通過修改pulltorefreshlibrary代碼,簡單的實現(xiàn)自定義刷新樣式和添加更多的功能
4.處理刷新加載邏輯
@Override
public void onRefresh() {
recyclerView.postDelayed(new Runnable() {
@Override
public void run() {
recyclerView.setRefreshComplete();
//模擬加載數(shù)據(jù)的情況
for (int i = 0; i < 4; i++) {
data.add(0,new ItemData(R.mipmap.app_refresh_people_0));
}
adapter.notifyDataSetChanged();
}
}, 2000);
}
@Override
public void onLoadMore() {
recyclerView.postDelayed(new Runnable() {
@Override
public void run() {
recyclerView.setLoadMoreComplete(); //加載數(shù)據(jù)完成
//模擬加載數(shù)據(jù)的情況
for (int i = 0; i < 4; i++) {
data.add(new ItemData(R.mipmap.app_refresh_people_0));
}
adapter.notifyDataSetChanged();
}
}, 2000);
}