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(); } }