如果只是简单的下拉刷新,上拉加载更多,那么有很多种方式,比如,自己写滑动监听,滑动停止的时候判断条目是否是最下面一条,是的话加载,或者是用那些第三方框架,今天来说两个。
第一个,比较简单,只是几行代码就可以完成一个刷新操作
在最外层布局使用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等滑动列表中可以使用的智能加载框架,主要可以实现上拉加载更多和下拉刷新,免去了你自己手写滑动监听判断等问题,下面的网址说的很详细,可以实现的各种加载样式。
首先添加依赖:
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();
}
一个简单的上拉加载,下拉刷新就完成了,更复杂的,我不会了。