天天看點

PullToRefreshRecyclerView——帶上拉重新整理下拉加載功能的RecyclerViewSourceDemo

現在ListView和GridView逐漸被RecyclerView替代,之前基于ListView和GridView的重新整理加載架構也已經過時,這裡介紹基于RecyclerView的重新整理加載架構——PullToRefreshRecyclerView,先看效果。

PullToRefreshRecyclerView——帶上拉重新整理下拉加載功能的RecyclerViewSourceDemo

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屬性,如下圖:

PullToRefreshRecyclerView——帶上拉重新整理下拉加載功能的RecyclerViewSourceDemo

——————————————————————————————————————————

如果對你有幫助,請點選下方Source到GitHub給個Star,謝謝!

Source

Demo

繼續閱讀