現在ListView和GridView逐漸被RecyclerView替代,之前基于ListView和GridView的重新整理加載架構也已經過時,這裡介紹基于RecyclerView的重新整理加載架構——PullToRefreshRecyclerView,先看效果。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICdzFWRoRXdvN1LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX9MmaORzZE9UMNpXTxUEVZZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zNzUTMzkDM2ETOwIDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
1. 在Module下的build.gradle中添加依賴
2. 在布局檔案中添加PullToRefreshRecyclerView控件
<com.androidkun.PullToRefreshRecyclerView
android:id="@+id/pullToRefreshRV"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
3. 初始化PullToRefreshRecyclerView并設定屬性和回調
pullToRefreshRV = (PullToRefreshRecyclerView) findViewById(R.id.pullToRefreshRV);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
pullToRefreshRV.setLayoutManager(layoutManager);
adapter = new ModeAdapter(this, R.layout.item_mode,data);
pullToRefreshRV.setAdapter(adapter);
//是否開啟下拉重新整理功能
pullToRefreshRV.setPullRefreshEnabled(true);
//是否開啟上拉加載功能
pullToRefreshRV.setLoadingMoreEnabled(true);
//設定是否顯示上次重新整理的時間
pullToRefreshRV.displayLastRefreshTime(true);
//設定重新整理回調
pullToRefreshRV.setPullToRefreshListener(this);
//主動觸發下拉重新整理操作
//pullToRefreshRV.onRefresh();
如果想使用網格清單,則相應設定布局管理者為網格布局管理者就行了
GridLayoutManager gridLayoutManager = new GridLayoutManager(this,);
recyclerView.setLayoutManager(gridLayoutManager);
此外也可以通過 setRefreshingResource(int resId)和setLoadMoreResource(int resId)自定義重新整理箭頭和加載的圖示。
4.處理重新整理加載邏輯
@Override
public void onRefresh() {
pullToRefreshRV.postDelayed(new Runnable() {
@Override
public void run() {
pullToRefreshRV.setRefreshComplete();
//模拟沒有資料的情況
data.clear();
adapter.notifyDataSetChanged();
}
}, );
}
@Override
public void onLoadMore() {
pullToRefreshRV.postDelayed(new Runnable() {
@Override
public void run() {
pullToRefreshRV.setLoadMoreComplete();
//模拟加載資料的情況
int size = data.size();
for (int i = size; i < size + ; i++) {
data.add("" + i + i + i + i);
}
adapter.notifyDataSetChanged();
}
}, );
}
架構中提供封裝好的BaseAdapter,減少編寫相同的代碼,提高開發效率,Demo中的ModeAdapter就是繼承了BaseAdapter,代碼如下:
public class ModeAdapter extends BaseAdapter {
public ModeAdapter(Context context, int layoutId, List datas) {
super(context, layoutId, datas);
}
@Override
public void convert(ViewHolder holder, Object o) {
holder.setText(R.id.textView, (String) o);
}
}
如果引入PullToRefreshRecyclerView後APP名稱被替換,則處理一下國際化即可,建立values-zh檔案夾和strings.xml檔案,添加app_name屬性,如下圖:
——————————————————————————————————————————