如果只是简单的下拉刷新,上拉加载更多,那么有很多种方式,比如,自己写滑动监听,滑动停止的时候判断条目是否是最下面一条,是的话加载,或者是用那些第三方框架,今天来说两个。
第一个,比较简单,只是几行代码就可以完成一个刷新操作
可以参考文章:https://www.jianshu.com/p/d23b42b6360b
在最外层布局使用android.support.v4.widget.SwipeRefreshLayout
跟scrollView类似,内部只允许有一个直接子控件,而且使用的话,内部必须有可以滑动的控件,比如scrollview,listview等,只要在设置几行代码,就可以完成刷新
通过控件ID来进行操作,可以设置多个颜色,每一圈就会换一种颜色
//刷新风格的设置
private void initRefresh() {
projectItemSwiperefreshlayout.setColorSchemeResources(android.R.color.holo_blue_bright,
android.R.color.holo_green_light,
android.R.color.holo_orange_light,
android.R.color.holo_red_light);
projectItemSwiperefreshlayout.setRefreshing(true);
projectItemSwiperefreshlayout.setOnRefreshListener(this);
}
而启动刷新或者是停止刷新也很简单,只要一个方法:
setRefreshing(设置刷新);参数是boolear类型的,是不是很简单?
上拉加载更多啊,我studio卡死了,没来得及试呢,去上面看那个吧。
下面说第二种刷新加载框架:
这是一种可以在listview等滑动列表中可以使用的智能加载框架,主要可以实现上拉加载更多和下拉刷新,免去了你自己手写滑动监听判断等问题,下面的网址说的很详细,可以实现的各种加载样式。
https://www.2cto.com/kf/201707/655476.html
这篇只写如何使用,具体实现请看上面的博客
首先添加依赖:
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.4'
然后是布局
<com.scwang.smartrefresh.layout.SmartRefreshLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="1dp" android:id="@+id/sr_ARecord" android:background="#FAFAFA" app:srlEnablePreviewInEditMode="true"> <com.scwang.smartrefresh.layout.header.ClassicsHeader android:layout_width="match_parent" android:background="#00000000" android:layout_height="wrap_content" /> <ListView android:id="@+id/lv_arecord" android:layout_width="match_parent" android:layout_height="match_parent"> </ListView> <com.scwang.smartrefresh.layout.footer.ClassicsFooter android:layout_width="match_parent" android:background="#00000000" android:layout_height="wrap_content" /> </com.scwang.smartrefresh.layout.SmartRefreshLayout>
最外面的设置id,里面设置下拉和上拉的,以及一个listview,在listview上设置id就可以了,至于上拉加载和下拉刷新的则不需要设置id
SmartRefreshLayout sr_aRecord = (SmartRefreshLayout) findViewById(R.id.sr_ARecord);
ListView mArecordListview = (ListView) findViewById(R.id.lv_arecord);
正常的找到id,listview正常加载数据,只需要设置点击事件
//翻页 private int FlipCode = 1;//当前页码 //刷新加载状态 private String pagingState; //总页数 private int pages;
sr_aRecord.setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh(RefreshLayout refreshlayout) {//刷新 FlipCode=1; pagingState = "Refresh"; getbeg(); } }); sr_aRecord.setOnLoadmoreListener(new OnLoadmoreListener() {//加载更多 @Override public void onLoadmore(RefreshLayout refreshlayout) { FlipCode++; pagingState="Loadmore"; if (FlipCode<=pages){ getbeg(); } if (FlipCode>pages){ refreshlayout.finishLoadmore(0/*,false*/); } } });
基本上已经完成了,只需要在进行判断,尤其是网络请求,在请求后隐藏加载页。
if (code == 200) { ARecordBean.DataBean data = aRecordBean.getData(); pages= data.getPages(); FlipCode=data.getBegin(); if (pagingState=="Refresh"){ items.clear(); items = data.getItems(); sr_aRecord.finishRefresh(true/*,false*/); sr_aRecord.finishLoadmore(true/*,false*/);//传入false表示加载失败 }else if (pagingState=="Loadmore"){ items.addAll(data.getItems()); sr_aRecord.finishRefresh(true/*,false*/); sr_aRecord.finishLoadmore(true/*,false*/);//传入false表示加载失败 }else { items = data.getItems(); sr_aRecord.finishRefresh(true/*,false*/); sr_aRecord.finishLoadmore(true/*,false*/);//传入false表示加载失败 } //适配器 ArecordAadapter arecordAadapter = new ArecordAadapter(ARecordActivity.this, items); mArecordListview.setAdapter(arecordAadapter); } else if (code == 2019) { Toast.makeText(this, "无效的参数数据" + code, Toast.LENGTH_LONG).show(); }一个简单的上拉加载,下拉刷新就完成了,更复杂的,我不会了。