滚动到底部加载更多及下拉刷新listview的使用

本文主要介绍可同时实现下拉刷新及滑动到底部加载更多的ListView的使用。

该ListView优点包括:a. 可自定义下拉响应事件(如下拉刷新)  b.可自定义滚动到底部响应的事件(如滑动到底部加载更多)  c.可自定义丰富的样式  d.高效(若下拉样式关闭不会加载其布局,同listView效率一致) e. 丰富的设置。

本文可运行APK地址可见TrineaAndroidDemo.apk,可运行代码地址可见DropDownListViewDemo@Google Code,效果图如下:

1、引入公共库

引入TrineaAndroidCommon@GoogleCode作为你项目的library,或是自己抽取其中的DropDownListView部分使用

2、在layout中定义

将布局中的ListView标签换成cn.trinea.android.common.view.DropDownListView标签

并加上自定义属性的命名空间xmlns:listViewAttr="http://schemas.android.com/apk/res/cn.trinea.android.demo",其中cn.trinea.android.demo需要用自己的包名替换。如何自定义属性及其命名空间可见本文***。xml代码如下:

 
 
 
 
  1.  
  2.     xmlns:listViewAttr="http://schemas.android.com/apk/res/cn.trinea.android.demo" 
  3.     android:layout_width="match_parent" 
  4.     android:layout_height="match_parent" > 
  5.     
  6.         android:id="@+id/list_view" 
  7.         android:layout_width="match_parent" 
  8.         android:layout_height="wrap_content" 
  9.         android:drawSelectorOnTop="false" 
  10.         android:paddingBottom="@dimen/dp_40" 
  11.         listViewAttr:isDropDownStyle="true" 
  12.         listViewAttr:isOnBottomStyle="true" 
  13.         listViewAttr:isAutoLoadOnBottom="true" /> 
  14.  

DropDownListView自定义了三个boolean属性

 
 
 
 
  1.  
  2.      
  3.      
  4.      
  5.  

isDropDownStyle表示是否允许下拉样式,java代码中可自定义下拉listener,表示需要完成的任务

isOnBottomStyle表示是否允许底部样式,java代码中可自定义滚动到底部的listener,表示需要完成的任务

isAutoLoadOnBottom表示是否允许滚动到底部时自动执行对应listener,仅在isOnBottomStyle为true时有效

PS:如果isDropDownStyle或isOnBottomStyle为false,并不会加载对应的布局,所以性能同ListView一样

3、在Java类中调用

通过setOnDropDownListener设置下拉的事件,不过需要在事件结束时手动调用onDropDownComplete恢复状态

通过setOnBottomListener设置滚动到底部的事件,不过需要在事件结束时手动调用onBottomComplete恢复状态,示例代码如下:

 
 
 
 
  1. /** 
  2.  * DropDownListViewDemo 
  3.  *  
  4.  * @author Trinea 2013-6-1 
  5.  */ 
  6. public class DropDownListViewDemo extends BaseActivity { 
  7.     private LinkedList   listItems = null; 
  8.     private DropDownListView     listView  = null; 
  9.     private ArrayAdapter adapter; 
  10.     private String[]             mStrings  = { "Aaaaaa", "Bbbbbb", "Cccccc", "Dddddd", "Eeeeee", 
  11.             "Ffffff", "Gggggg", "Hhhhhh", "Iiiiii", "Jjjjjj", "Kkkkkk", "Llllll", "Mmmmmm", 
  12.             "Nnnnnn",                     }; 
  13.     @Override 
  14.     public void onCreate(Bundle savedInstanceState) { 
  15.         super.onCreate(savedInstanceState, R.layout.drop_down_listview_demo); 
  16.         listView = (DropDownListView)findViewById(R.id.list_view); 
  17.         // set drop down listener 
  18.         listView.setOnDropDownListener(new OnDropDownListener() { 
  19.             @Override 
  20.             public void onDropDown() { 
  21.                 new GetDataTask(true).execute(); 
  22.             } 
  23.         }); 
  24.         // set on bottom listener 
  25.         listView.setOnBottomListener(new OnClickListener() { 
  26.             @Override 
  27.             public void onClick(View v) { 
  28.                 new GetDataTask(false).execute(); 
  29.             } 
  30.         }); 
  31.         listItems = new LinkedList(); 
  32.         listItems.addAll(Arrays.asList(mStrings)); 
  33.         adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, listItems); 
  34.         listView.setAdapter(adapter); 
  35.     } 
  36.     private class GetDataTask extends AsyncTask { 
  37.         private boolean isDropDown; 
  38.         public GetDataTask(boolean isDropDown){ 
  39.             this.isDropDown = isDropDown; 
  40.         } 
  41.         @Override 
  42.         protected String[] doInBackground(Void... params) { 
  43.             try { 
  44.                 Thread.sleep(1000); 
  45.             } catch (InterruptedException e) { 
  46.                 ; 
  47.             } 
  48.             return mStrings; 
  49.         } 
  50.         @Override 
  51.         protected void onPostExecute(String[] result) { 
  52.             if (isDropDown) { 
  53.                 listItems.addFirst("Added after drop down"); 
  54.                 adapter.notifyDataSetChanged(); 
  55.  
  56.                 // should call onDropDownComplete function of DropDownListView at end of drop down complete. 
  57.                 SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss"); 
  58.                listView.onDropDownComplete(getString(R.string.update_at) 
  59.                                             + dateFormat.format(new Date())); 
  60.             } else { 
  61.                 listItems.add("Added after on bottom"); 
  62.                 adapter.notifyDataSetChanged(); 
  63.  
  64.                 // should call onBottomComplete function of DropDownListView at end of on bottom complete. 
  65.                 listView.onBottomComplete(); 
  66.             } 
  67.             super.onPostExecute(result); 
  68.         } 
  69.     } 

4、高级接口设置

5、样式设置(自定义header和footer信息)

见原文:滚动到底部加载更多及下拉刷新listview的使用

网站题目:滚动到底部加载更多及下拉刷新listview的使用
URL地址:http://www.shufengxianlan.com/qtweb/news11/420561.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联