参考 点击打开链接
xml布局:
<com.handmark.pulltorefresh.library.PullToRefreshListView
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:id="@+id/pull_refresh_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="#00000000"
android:divider="#19000000"
android:dividerHeight="4dp"
android:fadingEdge="none"
android:fastScrollEnabled="false"
android:footerDividersEnabled="false"
android:headerDividersEnabled="false"
android:smoothScrollbar="true" >
</com.handmark.pulltorefresh.library.PullToRefreshListView>
在添加头部和尾部的时候使用listView添加 获取listView:
listView=pullToListView.getRefreshableView();
设置下拉刷新:
<pre name="code" class="java"><span style="white-space:pre"> </span>pullToListView.setOnRefreshListener(new OnRefreshListener<ListView>()
{ @Override public void onRefresh(PullToRefreshBase<ListView> refreshView) { String label = DateUtils.formatDateTime( getApplicationContext(), System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL); // 显示最后更新的时间 refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); // 模拟加载任务 new GetDataTask().execute(); } }); }
异步加载类:
private class GetDataTask extends AsyncTask<Void, Void, String>
{
@Override
protected String doInBackground(Void... params)
{
try
{
Thread.sleep(2000); //模拟请求网络的过程,没有个时间差的话 onRefreshComplete()可能不会执行
} catch (InterruptedException e)
{
}
return "" + (mItemCount++);
}
@Override
protected void onPostExecute(String result)
{
mListItems.add(result); //获取数据
mAdapter.notifyDataSetChanged(); //更改界面
mPullRefreshListView.onRefreshComplete(); //<strong>刷新完成后 一定要调用这个方法</strong>
}
}
}
下拉刷新和上拉加载(一般分页的时候使用):
<span style="white-space:pre"> </span>OnRefreshListener2<ListView> listener2=new OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {//下拉刷新
pageNo=1;//重新请求第一页的数据
allList.clear();//清空数据
getDate(pageNo);
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
pageNo++;
getDate(pageNo);
}
@Override
public boolean canRefresh() {//可能是允许刷新吧,不确定
return true;
}
};
pullToListView.setOnRefreshListener(listener2);
PullToRefreshListView的自定义属性:
ptr:ptrMode 可选值为:disabled(禁用下拉刷新),
pullFromStart(仅支持下拉刷新),
pullFromEnd(仅支持上拉刷新),
both(二者都支持),
manualOnly(只允许手动触发)
ptr:ptrDrawable 加载的时候做动画的图片
ptr:ptrAnimationStyle 可选值为:flip(翻转动画), rotate(旋转动画)
ptrRefreshableViewBackground 设置整个mPullRefreshListView的背景色
ptrHeaderBackground 设置下拉Header或者上拉Footer的背景色
ptrHeaderTextColor 用于设置Header与Footer中文本的颜色
ptrHeaderSubTextColor 用于设置Header与Footer中上次刷新时间的颜色
ptrShowIndicator如果为true会在mPullRefreshListView中出现icon,右上角和右下角,挺有意思的。
ptrHeaderTextAppearance , ptrSubHeaderTextAppearance分别设置拉Header或者上拉Footer中字体的类型颜色等等。
ptrRotateDrawableWhilePulling当动画设置为rotate时,下拉是是否旋转。
ptrScrollingWhileRefreshingEnabled刷新的时候,是否允许ListView或GridView滚动。觉得为true比较好。
ptrListViewExtrasEnabled 决定了Header,Footer以何种方式加入mPullRefreshListView,true为headView方式加入,就是滚动时刷新头部会一起滚动。
mPullRefreshListView.getLoadingLayoutProxy(true, false);接收两个参数,为true,false返回设置下拉的ILoadingLayout;为false,true返回设置上拉的。
private void initIndicator()
{
ILoadingLayout startLabels = mPullRefreshListView.getLoadingLayoutProxy(true, false); //下拉
startLabels.setPullLabel("你可劲拉,下拉...");// 刚下拉时,显示的提示
startLabels.setRefreshingLabel("好嘞,正在刷新...");// 刷新时
startLabels.setReleaseLabel("你敢放,我就敢刷新...");// 下来达到一定距离时,显示的提示
ILoadingLayout endLabels = mPullRefreshListView.getLoadingLayoutProxy( false, true); //上拉
endLabels.setPullLabel("你可劲拉,上拉...");// 刚上拉时,显示的提示
endLabels.setRefreshingLabel("好嘞,正在加载...");// 加载时
endLabels.setReleaseLabel("你敢放,我就敢加载...");// 上拉达到一定距离时,显示的提示
}