android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)

losetowin 发布于:2014-1-13 14:41 分类:Android  有 29786 人浏览,获得评论 52 条 标签: android listview pulltorefresh 

本文地址:http://www.dutycode.com/post-13.html
除非注明,文章均为 www.dutycode.com 原创,欢迎转载!转载请注明本文地址,谢谢。

Android实现上拉加载更多功能以及下拉刷新功能,

采用了目前比较火的PullToRefresh,他是目前实现比较好的下拉刷新的类库。

目前他支持的控件有:ListView, ExpandableListView,GridView,WebView等。

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

首先第一步当然是导入libriay到咱们的项目了,具体导入方式,这里不再赘述。

下面是个例子采用的是ListView,当然其余的和这个类似

1、布局文件activity_main.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=".MainActivity" >

      <com.handmark.pulltorefresh.library.PullToRefreshListView
        android:id="@+id/pull_refresh_list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
</RelativeLayout>
2、要实现下拉刷新的功能很简单,只需要实现OnRefreshListener的OnRefresh方法即可。这里说一下如何实现上拉和下拉分别执行不同的操作。


这里参考了http://blog.csdn.net/ueryueryuery/article/details/17440465

原理是:根据下拉和上拉显示的布局的可见状态类区分上拉还是下拉,然后执行相应操作。

在PullToRefresh的类库的com.handmark.pulltorefresh.library包下,打开PullToRefreshBase.java,在这个类的最后面添加如下代码:

    public boolean isHeaderShown() {
        return getHeaderLayout().isShown();
    }

    public boolean isFooterShown() {
        return getFooterLayout().isShown();
    }
3、在Activity的代码如下:


public class MainActivity extends ListActivity {

	private PullToRefreshListView mPullToRefreshListView;
	
	private LinkedList<String> mItemList;
	private ArrayAdapter<String> adapter;
	
	private Context context;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		context = this;
		initData();
		
		adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mItemList);
		
		//初始化控件
		mPullToRefreshListView = (PullToRefreshListView)findViewById(R.id.pull_refresh_list);
		ListView mListView = mPullToRefreshListView.getRefreshableView();
		mListView.setAdapter(adapter);
		
		//设置pull-to-refresh模式为Mode.Both
		mPullToRefreshListView.setMode(Mode.BOTH);
		
		//设置上拉下拉事件
		mPullToRefreshListView.setOnRefreshListener(new OnRefreshListener<ListView>() {

			@Override
			public void onRefresh(PullToRefreshBase<ListView> refreshView) {
				
				if (refreshView.isHeaderShown()){
					Toast.makeText(context, "下拉刷新",Toast.LENGTH_SHORT).show();
					//下拉刷新 业务代码
				}else {
					Toast.makeText(context, "上拉加载更多",Toast.LENGTH_SHORT).show();
					//上拉加载更多 业务代码
				}
				
			}
		});
		
	}


	private void initData(){
		//初始化数据
		mItemList = new LinkedList<String>();
		mItemList.addAll(Arrays.asList(data));
		
	}
	
	private String[] data  = new String[]{"data1","data2","data3","data4","data5","data6",
			"data1","data2","data3","data4","data5","data6"};
}
如上代码所示,在OnRefresh的实现代码中,用以区分上拉还是下拉,关键代码如下:


if (refreshView.isHeaderShown()){
					Toast.makeText(context, "下拉刷新",Toast.LENGTH_SHORT).show();
					//下拉刷新 业务代码
				}else {
					Toast.makeText(context, "上拉加载更多",Toast.LENGTH_SHORT).show();
					//上拉加载更多 业务代码
				}
至此,运行项目,可以得到演示结果了



参考网址:http://blog.csdn.net/ueryueryuery/article/details/17440465


版权所有:《攀爬蜗牛》 => 《android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)
本文地址:https://www.dutycode.com/post-13.html
除非注明,文章均为 《攀爬蜗牛》 原创,欢迎转载!转载请注明本文地址,谢谢。