PullToRefresh是一套实现非常好的下拉刷新库,它支持:
1.ListView
2.ExpandableListView
3.GridView
4.WebView
等多种常用的需要刷新的View类型,而且使用起来也十分方便。
下面带大家一起用下PullToRefreshListView ,其他几个控件大同小异
PullToRefreshListView 用法和ListView 没有什么区别 listview能用的属性 pulltorefresh也能用,而且在下拉刷新或者分页加载数据的时候,使用 PullToRefreshListView 实现下拉刷新或者分页加载配置起来更为简便,特别是对于Android底层不太熟悉的开发者,使用PullToRefreshListView 配置起来更为方便些,因为可以省去你写footView跟headerView相关底层代码的逻辑配置,下面详细说下使用步骤。1.引入library
如果你是android studio的话,引入还是比较简单的,在你的gradle中
compile 'com.github.userswlwork:pull-to-refresh:1.0.0'
2.在xml文件中配置
PullToRefreshListView 控件
关于PullToRefreshListView的一些xml属性大概有如下需要配置的 ,我简单说下
1.ptr是pullToRefresh的配置属性中添加 xmlns:ptr="http://schemas.android.com/apk/res-auto"。
2.ptr:ptrDrawable="";//这里可以设置自己的上拉下拉图标。
3.ptr:ptrHeaderBackground="";//上拉时底部的背景色,下拉时头部的背景色
4.ptr:ptrHeaderTextColor="";//上拉,下拉时Header,Footer显示的字体颜色
5.ptr:ptrHeaderSubTextColor="";//上拉,下拉Header,Footer中上次刷新时间的颜色
6.ptr:ptrShowIndicator="";//true时会在控件的右上角和右下角出现设置的icon
7.ptr:ptrAnimationStyle="";//显示时候图标的取值 ;flip:翻转;rotate:旋转
8.ptr:ptrRotateDrawableWhilePulling="";//当动画为rotate时,下拉是否旋转
9.ptr:ptrRefreshableViewBackground="";//设置整个控件布局的背景颜色
10.ptr:ptrScrollingWhileRefreshingEnabled="";//刷新的时候是否允许ListView或者GridView滚动。推荐使用true
11.ptr:prtListViewExtrasEnabled="";//决定Header,Footer以何种方式加入PullToRefreshListView.其中为true时,就是以Header的方式加入,在滚动刷新时头部会跟着一起滚动;为false时,就是以Footer的方式加入,在滚动的时候底部会跟着一起滚动。
12.ptr:ptrMode="";//设置是上拉,下拉还是两者都支持.both:两者都支持;disabled:禁用下拉刷新;pullFromStart:仅支持下拉刷新;pullFromEnd:仅支持上拉刷新;manualOnly:只允许手动触发。(注意:如果不在代码设置它默认的就只有下拉刷新)
以上只是一些基本属性:一般你用的什么控件它都包含原有控件的所有属性,如你使用的是PullToRefreshListView那么它里面同样包含ListView的一些属性。同样上面的属性你都可以在代码中去set***使用。
3.java代码中的配置
/**
* Created by 谢栋 on 2016/12/25.
*/
public class PullToRefresh extends Activity {
private PullToRefreshListView pullToRefresh;
private List mDatas;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pull_to_refresh);
pullToRefresh = (PullToRefreshListView) findViewById(R.id.pull_to_refresh);
mDatas = new ArrayList<>();
LoadDatas(); //装载数据
pullToRefresh.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, mDatas));
// //1.实现下拉刷新
// pullToRefresh.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener() {
// @Override
// public void onRefresh(PullToRefreshBase pullToRefreshBase) {
// new MyAsyncTask().execute(); //模拟装载数据
//
// }
// });
//2.同时实现上拉跟下拉刷新
//2-1设置监听事件
pullToRefresh.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() {
@Override
public void onPullDownToRefresh(PullToRefreshBase pullToRefreshBase) {
new MyAsyncTask().execute(); //模拟上拉装载数据
}
@Override
public void onPullUpToRefresh(PullToRefreshBase pullToRefreshBase) {
new MyAsyncTask().execute(); //模拟下拉装载数据
}
});
//2-2,设置下拉刷新模式BOYH|END|START
pullToRefresh.setMode(PullToRefreshBase.Mode.BOTH); //同时上拉下拉
//设置自定义下拉刷新动画文字 getLoadingLayoutProxy(true, false),参数分别代表要设置上或下的文字修改
ILoadingLayout headerLayout = pullToRefresh.getLoadingLayoutProxy(true, false);
headerLayout.setPullLabel("向下拖动完成刷新...");
headerLayout.setRefreshingLabel("正在加载新数据...");
headerLayout.setReleaseLabel("释放完成刷新...");
//设置底部刷新文字
ILoadingLayout footLayout = pullToRefresh.getLoadingLayoutProxy(false, true);
footLayout.setPullLabel("向上拽动完成刷新...");
footLayout.setRefreshingLabel("正在疯刷新数据...");
footLayout.setReleaseLabel("松开完成刷新...");
footLayout.setLoadingDrawable(getResources().getDrawable(R.drawable.ic_launcher)); //自定义图片
}
private int count = 1; //数据角标索引
/**
* 模拟装载数据
*/
private void LoadDatas() {
for (int i = 0; i < 10; i++) {
mDatas.add(String.format(Locale.CHINA, "下拉列表中的第%d条数据", count));
count++;
}
}
/**
* 异步任务类,下拉或者上拉时模拟请求数据
* pullToRefresh.onRefreshComplete()方法一定要在异步中请求,否则可能无效果
*/
class MyAsyncTask extends AsyncTask {
@Override
protected String doInBackground(Void... params) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
LoadDatas();
return "success";
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if ("success".equals(s)) {
// 异步调用pullToRefreshListView.onRefreshComplete是会消失的,同步调用头部动画不会消失。
pullToRefresh.onRefreshComplete();
}
}
}
}