首页 > 代码库 > ActionBar-PullToRefresh使用

ActionBar-PullToRefresh使用

写在前面:轮子不会造,还不会用轮子么?会用了就可以修,就可以优化了。

ActionBar-PullToRefresh是一个开源的下拉刷新控件,基于ActionBar的,在下拉时变化的是ActionBar,ActionBar的低端有横向滑动的进度条。

这里我记录一下我是如何使用它的。

源地址:https://github.com/chrisbanes/ActionBar-PullToRefresh

使用ActionBar-PullToRefresh,我们还需要一个开源控件,SmoothProgressBar,https://github.com/castorflex/SmoothProgressBar

第一步,将两个包down下来。

。。。。


第二步,将SmoothProgressBar导入。

我在百度搜索ActionBar-PullToRefresh的使用时,大家都说是要引用工程啊,gradle啊,我都看不懂啊,我只知道把源码直接复制进来,ok,开始吧。

你所需要的包的路径:SmoothProgressBar-master\library\src\main

下面有两个文件夹 java 和 res

res里面有两个value的文件夹,把里面的xml文件稍微改下名字,扔到你的项目里吧。

java里面有一个fr文件夹,我们所需要的代码在fr\castorflex\android\smoothprogressbar里面,直接把fr扔到你的项目里吧。

然后改一改R文件的引用,搞定。


第三步,将ActionBar-PullToRefresh导入。

ActionBar-PullToRefresh-master目录下面有4个文件,extras,gradle,library,samples,其中我用到了extras,library,借鉴了samples里面的代码

(1)libray里面,ActionBar-PullToRefresh-master\library\src\main

下面有两个文件夹 java 和 res

导入方法类似,资源文件改改文件名,复制到项目对应的位置,src文件改一下R文件的引用

(2)由于我一般要支持2.3的机型,所以需要使用ActionBarCompt,这时就需要导入extras里面的东西

ActionBar-PullToRefresh-master\extras\actionbarcompat\src\main

导入方法类似


所需要的东西都导入之后,可以看到src文件是这样子的


library里面应该是有一些多余的文件,不过我懒得去筛了。


第四步,使用

使用就简单了,github上面也有例子。下面贴上我的简单sample,是借鉴samples下面的listActivity


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    
	<uk.co.senab.actionbarpulltorefresh.extras.actionbarcompat.PullToRefreshLayout
	    xmlns:android="http://schemas.android.com/apk/res/android"
	    android:id="@+id/ptr_layout"
	    android:layout_width="match_parent"
	    android:layout_height="match_parent">
	
	    <!-- Your content, here we're using a ScrollView -->
	
	    <ListView
	        android:id="@+id/listview"
	        android:layout_width="match_parent"
	        android:layout_height="match_parent">
	
	    </ListView>
	
	</uk.co.senab.actionbarpulltorefresh.extras.actionbarcompat.PullToRefreshLayout>
</RelativeLayout>



public class ActionBarPullToRefreshActivity extends ActionBarActivity implements
		OnRefreshListener {

	private PullToRefreshLayout mPullToRefreshLayout;
	private ListView mListView;
	private static String[] ITEMS = { "Abbaye de Belloc",
			"Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi",
			"Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu",
			"Airag", "Airedale", "Aisy Cendre", "Allgauer Emmentaler",
			"Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam",
			"Abondance", "Ackawi", "Acorn", "Adelost", "Affidelice au Chablis",
			"Afuega'l Pitu", "Airag", "Airedale", "Aisy Cendre",
			"Allgauer Emmentaler" };

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_ab_ptr);
		// Now find the PullToRefreshLayout to setup
		mPullToRefreshLayout = (PullToRefreshLayout) findViewById(R.id.ptr_layout);

		// Now setup the PullToRefreshLayout
		ActionBarPullToRefresh.from(this)
		// Mark All Children as pullable
				.allChildrenArePullable()
				// Set a OnRefreshListener
				.listener(this)
				// Finally commit the setup to our PullToRefreshLayout
				.setup(mPullToRefreshLayout);

		mListView = (ListView) findViewById(R.id.listview);
		mListView.setAdapter(new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, ITEMS));
	}

	@Override
	public void onRefreshStarted(View view) {
		// Hide the list
		// setListShown(false);

		/**
		 * Simulate Refresh with 4 seconds sleep
		 */
		new AsyncTask<Void, Void, Void>() {

			@Override
			protected Void doInBackground(Void... params) {
				try {
					Thread.sleep(5000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				return null;
			}

			@Override
			protected void onPostExecute(Void result) {
				super.onPostExecute(result);

				// Notify PullToRefreshLayout that the refresh has finished
				mPullToRefreshLayout.setRefreshComplete();
			}
		}.execute();
	}

}

代码也简单,这就可以看到效果了,之后就可以自己动手增加自己的逻辑啦。