Android SmartRefreshLayout实现下拉上拉刷新

1.build.gradle添加依赖库:

//下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-21'
//没有使用特殊Header,可以不加这行
implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-21'

2.layout 布局

<com.scwang.smartrefresh.layout.SmartRefreshLayout
    android:id="@+id/sr_mySmart"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:srlEnablePreviewInEditMode="true"
    android:layout_below="@id/top_search"
    >

    <!--srlAccentColor srlPrimaryColor 将会改变 Header 和 Footer 的主题颜色-->
    <!--srlEnablePreviewInEditMode 可以开启和关闭预览功能-->

    <com.scwang.smartrefresh.layout.header.ClassicsHeader
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />


    <ListView
        android:id="@+id/lv_recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/list_background"
        android:divider="@null"
        android:scrollbars="none" />

    <com.scwang.smartrefresh.layout.footer.ClassicsFooter
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:srlClassicsSpinnerStyle="Translate"/>


</com.scwang.smartrefresh.layout.SmartRefreshLayout>

3.Activity 中使用:

private RefreshLayout refreshLayout;//下拉刷新控件
private List<YiBan.DataBean.DocumentEntityBean> mapList;//列表数据源集合
private ListView listView;//文件列表
private FlieListview_Yiban_Adapter flieListviewAdapter;//列表适配器
 Handler handler = new Handler(new Handler.Callback() {
     @Override public boolean handleMessage(Message msg) {
            switch (msg.what) { 
              case 0://下拉加载的时候 
                   initListViewData(0, yiBans); 
 flieListviewAdapter = new   FlieListview_Yiban_Adapter(getActivity(), mapList); 
                  listView.setAdapter(flieListviewAdapter); 
                  refreshLayout.finishRefresh(true);//下拉刷新成功(取消加载状态)
                  page = 1;//页面记录重新为 第 1 页 
               break; 
             case 1://上拉加载 
                  initListViewData(1, yiBans);   
                  refreshLayout.finishLoadMore(true);//上拉加载成功(取消加载状态)
               break; 
     } 
      return false; 
   } 
});

//初始化控件
private void initView(){

refreshLayout = view.findViewById(R.id.sr_mySmart);
listView = view.findViewById(R.id.lv_recyclerView);
//取消上拉加载 
//refreshLayout.setEnableLoadMore(false); 
//取消下拉加载 
//refreshLayout.setEnableRefresh(false);

}

private int page = 1;
//实例化数据
private void initData(){

//listview子项点击监听
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        Intent intent = new Intent(getActivity(), Activity_Yiban.class);
        intent.putExtra("documentId", mapList.get(position).getDocumentId());
        ActivityUtil.startActivityPutIntentIntData(getActivity(), intent);

    }
});
//下拉刷新监听
refreshLayout.setOnRefreshListener(new OnRefreshListener() {
    @Override
    public void onRefresh(RefreshLayout refreshLayouts) {
        //获取文件列表第一页数据
        getyiBanList(0, "", 1, 10);
    }
});
//上拉加载新监听
refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
    @Override
    public void onLoadMore(RefreshLayout refreshLayouts) {
        getyiBanList(1, "", page += 1, 10);
        Log.e("wspage", page + "");
    }
});

}

private YiBan yiBans;

/**
 * 获取已办数据
 *
 * @param type     0 - 下拉刷新 (清空数据集合)  1 - 上拉加载 (不清空数据集合)
 * @param docName  文档标题 (搜索框输入的文档标题,为空时获取所有数据)
 * @param currPage 当前第几页
 * @param pageSize 每一页加载多少数据
 */
private void getyiBanList(int type, String docName, int currPage, int pageSize) {
    getActivity().runOnUiThread(new Runnable() {
        @Override
        public void run() {
            loadingDialog.loading("获取数据中...");
        }
    });
    String jsonHead = "";
    Map<String, Object> mapHead = new HashMap<>();
    mapHead.put("docName", docName);
    mapHead.put("currPage", currPage);
    mapHead.put("pageSize", pageSize);
    jsonHead = GsonUtils.buildRequestParams(mapHead);
    MyOkHttpUtils.postStringCallBacks(jsonHead, CommonUrl.BASEURL_YIBAN, new MyOkHttpUtilsCallBack() {
        @Override
        public void successCallback(String response, int id) {
            LogUtils.e("getyiBanList: " + response);
            YiBan yiBan = new Gson().fromJson(response, YiBan.class);
            if (yiBan != null) {
                if (yiBan.getCode() == 0) {//code 0代表登录成功 其它为失败
                    yiBans = yiBan;
                    handler.sendEmptyMessage(type);//根据相应的 type 发送handler
                    loadingDialog.cancel();//数据获取成功取消加载提示框
                } else {
                    ToastUtils.ShowToast("获取已办数据失败:");
                    if(type==0){
                        refreshLayout.finishRefresh(true);
                    }else {
                        refreshLayout.finishLoadMore(true);
                    }
                    loadingDialog.cancel();
                }
            }

        }

        @Override
        public void errorCallback(Call call, Exception e, int id) {
            ToastUtils.ShowToast("获取已办数据-请求失败");
            loadingDialog.cancel();
            if(type==0){
                refreshLayout.finishRefresh(true);
            }else {
                refreshLayout.finishLoadMore(true);
            }
            LogUtils.e("getyiBanList: " + e.toString());
        }
    });
}
/**
 * 初始化文件列表数据
 * type : 0 - 下拉刷新 (清空数据集合)
 * 1 - 上拉加载 (不清空数据集合)
 */
private void initListViewData(int type, YiBan yiBan) {
    try {
        YiBan.DataBean.DocumentEntityBean documentEntityBean;
        if (mapList == null) {
            mapList = new ArrayList<>();
        }
        if (type == 0 && mapList.size() > 0) {
            mapList.clear();
        }
        for (int i = 0; i < yiBan.getData().size(); i++) {
documentEntityBean = new YiBan.DataBean.DocumentEntityBean();
            documentEntityBean.setDocumentId(yiBan.getData().get(i).getDocumentEntity().getDocumentId());
            documentEntityBean.setDocUrgentDegree(yiBan.getData().get(i).getDocumentEntity().getDocUrgentDegree());
            documentEntityBean.setDocName(yiBan.getData().get(i).getDocumentEntity().getDocName());
            documentEntityBean.setDocRecDep(yiBan.getData().get(i).getDocumentEntity().getDocRecDep());
            documentEntityBean.setDocRecNumber(yiBan.getData().get(i).getDocumentEntity().getDocRecNumber());
            documentEntityBean.setDocRecTime(yiBan.getData().get(i).getDocumentEntity().getDocRecTime());
            documentEntityBean.setEndTime(yiBan.getData().get(i).getDocumentEntity().getEndTime());
            mapList.add(documentEntityBean);

        }
        if (flieListviewAdapter != null) {
            flieListviewAdapter.notifyDataSetChanged();
        }

if (type == 0) {//下拉刷新
    refreshLayout.finishRefresh(true);
} else {
    refreshLayout.finishLoadMore(true);
}
​​​​​​​
    } catch (Exception e) {
        e.printStackTrace();
    }
}

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值