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

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

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

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

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

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

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

1、布局文件activity_main.xml

01 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
02     xmlns:tools="http://schemas.android.com/tools"
03     android:layout_width="match_parent"
04     android:layout_height="match_parent"
05     tools:context=".MainActivity" >
06  
07       <com.handmark.pulltorefresh.library.PullToRefreshListView
08         android:id="@+id/pull_refresh_list"
09         android:layout_width="fill_parent"
10         android:layout_height="fill_parent" />
11 </RelativeLayout>

2、要实现下拉刷新的功能很简单,只需要实现OnRefreshListener的OnRefresh方法即可。这里说一下如何实现上拉和下拉分别执行不同的操作。

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

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

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

1 public boolean isHeaderShown() {
2     return getHeaderLayout().isShown();
3 }
4  
5 public boolean isFooterShown() {
6     return getFooterLayout().isShown();
7 }

3、在Activity的代码如下:

01 public class MainActivity extends ListActivity {
02  
03     private PullToRefreshListView mPullToRefreshListView;
04      
05     private LinkedList<String> mItemList;
06     private ArrayAdapter<String> adapter;
07      
08     private Context context;
09     @Override
10     protected void onCreate(Bundle savedInstanceState) {
11         super.onCreate(savedInstanceState);
12         setContentView(R.layout.activity_main);
13         context = this;
14         initData();
15          
16         adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mItemList);
17          
18         //初始化控件
19         mPullToRefreshListView = (PullToRefreshListView)findViewById(R.id.pull_refresh_list);
20         ListView mListView = mPullToRefreshListView.getRefreshableView();
21         mListView.setAdapter(adapter);
22          
23         //设置pull-to-refresh模式为Mode.Both
24         mPullToRefreshListView.setMode(Mode.BOTH);
25          
26         //设置上拉下拉事件
27         mPullToRefreshListView.setOnRefreshListener(new OnRefreshListener<ListView>() {
28  
29             @Override
30             public void onRefresh(PullToRefreshBase<ListView> refreshView) {
31                  
32                 if (refreshView.isHeaderShown()){
33                     Toast.makeText(context, "下拉刷新",Toast.LENGTH_SHORT).show();
34                     //下拉刷新 业务代码
35                 }else {
36                     Toast.makeText(context, "上拉加载更多",Toast.LENGTH_SHORT).show();
37                     //上拉加载更多 业务代码
38                 }
39                  
40             }
41         });
42          
43     }
44  
45  
46     private void initData(){
47         //初始化数据
48         mItemList = new LinkedList<String>();
49         mItemList.addAll(Arrays.asList(data));
50          
51     }
52      
53     private String[] data  = new String[]{"data1","data2","data3","data4","data5","data6",
54             "data1","data2","data3","data4","data5","data6"};
55 }

如上代码所示,在OnRefresh的实现代码中,用以区分上拉还是下拉,关键代码如下:

1 if (refreshView.isHeaderShown()){
2                     Toast.makeText(context, "下拉刷新",Toast.LENGTH_SHORT).show();
3                     //下拉刷新 业务代码
4                 }else {
5                     Toast.makeText(context, "上拉加载更多",Toast.LENGTH_SHORT).show();
6                     //上拉加载更多 业务代码
7                 }

至此,运行项目,可以得到演示结果了

原文地址 : http://www.dutycode.com/post-13.html

我的博客:http://www.dutycode.com

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

上一篇:Hadoop YARN中内存的设置


下一篇:oracle使用中的一些问题