http://blog.csdn.net/harvic880925/article/details/17680305
下面的内容转自
http://blog.csdn.net/duguang77/article/details/40921601
1.XML布局文件的代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.testpulltoreresh.MainActivity" > <com.handmark.pulltorefresh.library.PullToRefreshListView android:id="@+id/pl_refresh" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
2.设置PullToRefresh的监听事件
mPullList.setOnRefreshListener(new OnRefreshListener2() { @Override public void onPullDownToRefresh(PullToRefreshBase refreshView) { // 下拉刷新触发的事件 //获取格式化的时间 String label = DateUtils.formatDateTime(getApplicationContext(), System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL); // 更新LastUpdatedLabel refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); ///开启线程模拟调接口填充数据 new GetDataTask().execute(); } @Override public void onPullUpToRefresh(PullToRefreshBase refreshView) { // 上提加载触发的事件 ///开启线程模拟调接口填充数据 new GetDataTask().execute(); } });
3.设置下拉,上提功能是否可用
// 设置PullToRefreshListView的模式 //Mode.DISABLED 禁用所有ListView动作和刷新处理 //Mode.MANUAL_REFRESH_ONLY 被废弃的动作,禁用下拉动作处理,但是允许通过手动设置刷新状态 //Mode.PULL_DOWN_TO_REFRESH 被废弃的动作,只有下拉动作 //Mode.PULL_UP_TO_REFRESH 被废弃的动作,只有上提动作 //Mode.PULL_FROM_END 只有上拉动作 //Mode.PULL_FROM_START 只允许用户将从一开始就可刷新视图刷新。一开始是顶部或离开时,根据滚动方向。只有下拉动作 //Mode.BOTH 下拉上提所有动作 mPullList.setMode(Mode.BOTH);
或者是通过XML文件直接设置MODE属性:
ptr:ptrMode="both"
不过要注意要加入命名空间
xmlns:ptr="http://schemas.android.com/apk/res-auto"
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.testpulltoreresh.MainActivity" > <com.handmark.pulltorefresh.library.PullToRefreshListView xmlns:ptr="http://schemas.android.com/apk/res-auto" android:id="@+id/pl_refresh" android:layout_width="match_parent" android:layout_height="match_parent" android:cacheColorHint="#00000000" android:divider="#19000000" android:dividerHeight="0.5dp" android:fadingEdge="none" android:fastScrollEnabled="false" android:footerDividersEnabled="false" android:headerDividersEnabled="false" android:smoothScrollbar="true" ptr:ptrMode="both"/> </RelativeLayout>
4.设置下拉,上提加载的提示
// 设置PullRefreshListView上提加载时的加载提示 mPullList.setMode(Mode.BOTH); mPullList.getLoadingLayoutProxy(false, true).setPullLabel("上拉加载..."); mPullList.getLoadingLayoutProxy(false, true).setRefreshingLabel("正在加载..."); mPullList.getLoadingLayoutProxy(false, true).setReleaseLabel("松开加载更多..."); // 设置PullRefreshListView下拉加载时的加载提示 mPullList.getLoadingLayoutProxy(true, false).setPullLabel("下拉刷新..."); mPullList.getLoadingLayoutProxy(true, false).setRefreshingLabel("正在加载..."); mPullList.getLoadingLayoutProxy(true, false).setReleaseLabel("松开加载更多...");
5.设置下拉,上提刷新的加载动画
ptr:ptrAnimationStyle="flip" 翻转动画
<pre name="code" class="java">ptr:ptrAnimationStyle="rotate" <span style="white-space:pre"> </span>旋转动画
<com.handmark.pulltorefresh.library.PullToRefreshListView xmlns:ptr="http://schemas.android.com/apk/res-auto" ....................... ptr:ptrAnimationStyle="flip"/>
6.更改下拉时的icon
<com.handmark.pulltorefresh.library.PullToRefreshListView xmlns:ptr="http://schemas.android.com/apk/res-auto" ........ ptr:ptrDrawable="@drawable/ic_rockets" />
7.其他的一些常用属性
//设置整个mPullRefreshListView的背景色 ptrRefreshableViewBackground //设置下拉Header或者上拉Footer的背景色 ptrHeaderBackground //用于设置Header与Footer中文本的颜色 ptrHeaderTextColor //用于设置Header与Footer中上次刷新时间的颜色 ptrHeaderSubTextColor //如果为true会在mPullRefreshListView中出现icon,右上角和右下角,挺有意思的。 ptrShowIndicator //下面两个分别设置拉Header或者上拉Footer中字体的类型颜色等等。 ptrHeaderTextAppearance,ptrSubHeaderTextAppearance //当动画设置为rotate时,下拉是是否旋转。 ptrRotateDrawableWhilePulling //刷新的时候,是否允许ListView或GridView滚动。觉得为true比较好。 ptrScrollingWhileRefreshingEnabled //决定了Header,Footer以何种方式加入mPullRefreshListView,true为headView方式加入,就是滚动时刷新头部会一起滚动。 ptrListViewExtrasEnabled //最后2个其实对于用户体验还是挺重要的,如果设置的时候考虑下。其他的属性自己选择就好。 //注:上述属性很多都可以代码控制,如果有需要可以直接mPullRefreshListView.set属性名 查看 //以上为PullToRefresh所有支持的属性~~
Demo工程的所有代码
public class MainActivity extends Activity { private PullToRefreshListView mPullList; private LinkedList<String> mListItems; private ArrayAdapter<String> mAdapter; private String[] mStrings = { "我很善良", "我很温柔", "我是淘女郎", "我是阿里郎", "我是大灰狼","我是羊羊羊" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); setEventListener(); initData(); } /** * 初始化控件 */ private void initView() { mPullList = (PullToRefreshListView) findViewById(R.id.pl_refresh); } /** * 设置监听 */ private void setEventListener() { mPullList.setOnRefreshListener(new OnRefreshListener2() { @Override public void onPullDownToRefresh(PullToRefreshBase refreshView) { // 下拉刷新触发的事件 //获取格式化的时间 String label = DateUtils.formatDateTime(getApplicationContext(), System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL); // 更新LastUpdatedLabel refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); ///开启线程模拟调接口填充数据 new GetDataTask().execute(); } @Override public void onPullUpToRefresh(PullToRefreshBase refreshView) { // 上提加载触发的事件 ///开启线程模拟调接口填充数据 new GetDataTask().execute(); } }); } /** * 初始化数据 */ private void initData() { // 设置PullToRefreshListView的模式 mPullList.setMode(Mode.BOTH); // 设置PullRefreshListView上提加载时的加载提示 mPullList.setMode(Mode.BOTH); mPullList.getLoadingLayoutProxy(false, true).setPullLabel("上拉加载..."); mPullList.getLoadingLayoutProxy(false, true).setRefreshingLabel("正在加载..."); mPullList.getLoadingLayoutProxy(false, true).setReleaseLabel("松开加载更多..."); // 设置PullRefreshListView下拉加载时的加载提示 mPullList.getLoadingLayoutProxy(true, false).setPullLabel("下拉刷新..."); mPullList.getLoadingLayoutProxy(true, false).setRefreshingLabel("正在加载..."); mPullList.getLoadingLayoutProxy(true, false).setReleaseLabel("松开加载更多..."); mListItems = new LinkedList<String>(); mListItems.addAll(Arrays.asList(mStrings)); mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mListItems); mPullList.setAdapter(mAdapter); } private class GetDataTask extends AsyncTask<Void, Void, String[]> { @Override protected String[] doInBackground(Void... params) { try { Thread.sleep(2000); } catch (InterruptedException e) { } return null; } @Override protected void onPostExecute(String[] result) { if(mPullList.isHeaderShown()){ mListItems.addFirst("我是新纳入的妾——下拉刷新"); }else if(mPullList.isFooterShown()){ mListItems.addLast("我是让你重回怀抱的妾——上提加载"); } mAdapter.notifyDataSetChanged(); // 调用刷新完成 mPullList.onRefreshComplete(); super.onPostExecute(result); } } }