Android项目中常用的刷新方式有SwipeRefreshLayout和PullToRefreshListView等。今天介绍一种比较好用的刷新开源项目PullToRefreshListView。
1、项目地址
开源项地址:https://github.com/chrisbanes/Android-PullToRefresh
2、特点介绍
- 具备完整的上拉加载和下拉刷新功能,自由选择
- 可自定义刷新的内容和样式
3、常用方法
setOnRefreshListener(OnRefreshListener listener):设置刷新监听器;
setOnLastItemVisibleListener(OnLastItemVisibleListener listener):设置是否到底部监听器;
setOnPullEventListener(OnPullEventListener listener);设置事件监听器;
onRefreshComplete():设置刷新完成
setPullToRefreshEnabled(false);禁止刷新功能
4、布局文件
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/acceptSpecial_lv"
android:background="@color/white"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cacheColorHint="#00000000"
android:fastScrollEnabled="false"
android:footerDividersEnabled="false"
android:headerDividersEnabled="false"
android:smoothScrollbar="true"
android:fadingEdge="none"
ptr:ptrMode="both"
android:divider="@color/gery1"
android:dividerHeight="@dimen/space_8">
</com.handmark.pulltorefresh.library.PullToRefreshListView>
//pullToRefreshListView 这个控件里面的一些基本属性:
>
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.
其中部在滚动的时候底部会跟着一起滚动。
5、具体使用
private PullToRefreshListView lv;
lv =(PullToRefreshListView)view.findViewById(R.id.acceptSpecial_lv);
lv.setAdapter(adapter);
//listview中item点击监听
lv.setOnItemClickListener(newAdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//点击item显示,positon从1开始,因为有个header,占用了0
if (type==ResponceMessageUtils.ACCEPTORDER) {
bundle.putString("type", "accept");
} else if (type == ResponceMessageUtils.MYORDER) {
bundle.putString("type", "myOrder");
}
if (contentList.get(position - 1).getCurr_client_status()==
ResponceConstantUtils.TASLK_STATUS_ACCOMPLISH) {
DoneTaskChange(contentList.get(position - 1));
} else {
bundle.putSerializable("message", contentList.get(position - 1));
openPageForResult("mymessageMap", bundle, getCoreAnim(),
ResponceMessageUtils.SPECIALREQUEST);
}
}
});
onRefresh(type);
/**
* 刷新的监听(本文使用PullToRefreshBase.OnRefreshListener2包含下拉刷新和上拉加载功能)
* listview滑动到底部
/
public void onRefresh(int type) {
lv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
//下拉加载
String label =
DateUtils.formatDateTime(getContext().getApplicationContext(), System.currentTimeMillis(),
DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL);
// 更新顶部或者底部的刷新标签,包含当前时间
refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);
if (type == ResponceMessageUtils.ACCEPTORDER) {
acceptOrder(ResponceMessageUtils.SERVICEMESSAGE, page, pageSize);
} else if (type == ResponceMessageUtils.MYORDER) {
myTask(ResponceMessageUtils.SERVICEMESSAGE, page, pageSize, status);
}
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
//上啦加载数据
Logger.e("当前页面的数据", currentPageSize + "标准数据" + pageSize);
if (type == ResponceMessageUtils.ACCEPTORDER) {
acceptOrder(ResponceMessageUtils.SERVICEMESSAGE, ++page, pageSize);
} else if (type == ResponceMessageUtils.MYORDER) {
myTask(ResponceMessageUtils.SERVICEMESSAGE, ++page, pageSize, status);
}
}
});
// lv.setOnLastItemVisibleListener(new PullToRefreshBase.OnLastItemVisibleListener() {
//当前page的全部数据
// @Override
// public void onLastItemVisible() {
// lv.getLoadingLayoutProxy().setLastUpdatedLabel("已经加载到底部!");
// ToastUtils.showLong("已经加载到底部!");
//
// }
// });
}
//访问网络之后记得设置刷新完成,否则一直提示正在加载
onRefreshComplete():设置刷新完成
5、注意事项
A:禁用刷新属性之前一定要先完成刷新(如果先使用了刷新功能)
- lv.onRefreshComplete();// 刷新完成在前,否则禁用后一直显示正在载入
lv.setPullToRefreshEnabled(false);// 没了禁用
B : 点击item显示,positon从1开始,因为有个header,占用了0