【PullToRefresh 系列一基本使用方法】 Android上拉加载下拉刷新控件详解


转载请注明:http://blog.csdn.net/duguang77/article/details/40921601

作者信息:

Chris Banes大神详情https://github.com/chrisbanes

PullToRefresh控件下载地址:https://github.com/chrisbanes/Android-PullToRefresh

百度网盘下载地址:http://pan.baidu.com/s/1o6umifw



(一)导入方法:

1.下载后将extras,library,sample导入到Eclipse中



2.导入后时可能会报错,请更改依赖包位置



(二)使用方法:

我们一般用的比较多的就是单纯的ListView,
当然其他的情况比如GridView,WebView等等,作者也有直接写好的控件,大家直接用就好



下面我们看下使用的基本方法

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);
		}
	}
	
	

}



Demo下载地址: http://pan.baidu.com/s/1c03tVVE


  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值