android之listview上拉刷新

简介:

 android开发中,listview是最常用的控件之一,通常我们可以再微博、微信等很多应用里面都可以看到下拉刷新,以及上拉刷新,点击查看更多等功能。这里介绍下说下上拉刷新。

  上拉刷新其实和底部的“点击加载更多”的功能差不多。都是分页加载数据的一个实现。具体是去监听滚动条事件,下拉到底部时进行操作。

 这里直接上代码

 

 
  1. package com.xzw.demo; 
  2.  
  3. import java.util.ArrayList; 
  4. import java.util.HashMap; 
  5. import java.util.List; 
  6.  
  7. import android.os.Bundle; 
  8. import android.os.Handler; 
  9. import android.app.Activity; 
  10. import android.util.Log; 
  11. import android.view.Menu; 
  12. import android.view.View; 
  13. import android.widget.AbsListView; 
  14. import android.widget.AbsListView.OnScrollListener; 
  15. import android.widget.ListView; 
  16. import android.widget.SimpleAdapter; 
  17. import android.widget.Toast; 
  18.  
  19. public class MainActivity extends Activity implements OnScrollListener { 
  20.      
  21.     private static final String TAG = "MainActivity"
  22.      
  23.     private ListView listView; 
  24.     private View moreView; //加载更多页面 
  25.      
  26.     private SimpleAdapter adapter; 
  27.     private ArrayList<HashMap<String, String>> listData; 
  28.      
  29.     private int lastItem; 
  30.     private int count; 
  31.       
  32.     @Override 
  33.     public void onCreate(Bundle savedInstanceState) { 
  34.         super.onCreate(savedInstanceState); 
  35.         setContentView(R.layout.activity_main); 
  36.          
  37.         listView = (ListView)findViewById(R.id.listView); 
  38.         moreView = getLayoutInflater().inflate(R.layout.load, null); 
  39.         listData = new ArrayList<HashMap<String,String>>(); 
  40.          
  41.         prepareData(); //准备数据 
  42.         count = listData.size(); 
  43.       
  44.         adapter = new SimpleAdapter(this, listData,R.layout.item,  
  45.                 new String[]{"itemText"}, new int[]{R.id.itemText}); 
  46.          
  47.         listView.addFooterView(moreView); //添加底部view,一定要在setAdapter之前添加,否则会报错。 
  48.          
  49.         listView.setAdapter(adapter); //设置adapter 
  50.         listView.setOnScrollListener(this); //设置listview的滚动事件 
  51.     } 
  52.  
  53.     private void prepareData(){  //准备数据 
  54.         for(int i=0;i<10;i++){ 
  55.             HashMap<String, String> map = new HashMap<String, String>(); 
  56.             map.put("itemText""测试数据"+i); 
  57.             listData.add(map); 
  58.         } 
  59.          
  60.     } 
  61.      
  62.     private void loadMoreData(){ //加载更多数据 
  63.          count = adapter.getCount();  
  64.         for(int i=count;i<count+5;i++){ 
  65.             HashMap<String, String> map = new HashMap<String, String>(); 
  66.             map.put("itemText""测试数据"+i); 
  67.             listData.add(map); 
  68.         } 
  69.         count = listData.size(); 
  70.     } 
  71.  
  72.     @Override 
  73.     public void onScroll(AbsListView view, int firstVisibleItem, 
  74.             int visibleItemCount, int totalItemCount) { 
  75.          
  76.         Log.i(TAG, "firstVisibleItem="+firstVisibleItem+"\nvisibleItemCount="
  77.                 visibleItemCount+"\ntotalItemCount"+totalItemCount); 
  78.          
  79.         lastItem = firstVisibleItem + visibleItemCount - 1;  //减1是因为上面加了个addFooterView 
  80.          
  81.     } 
  82.  
  83.     @Override 
  84.     public void onScrollStateChanged(AbsListView view, int scrollState) {  
  85.         Log.i(TAG, "scrollState="+scrollState); 
  86.         //下拉到空闲是,且最后一个item的数等于数据的总数时,进行更新 
  87.         if(lastItem == count  && scrollState == this.SCROLL_STATE_IDLE){  
  88.             Log.i(TAG, "拉到最底部"); 
  89.             moreView.setVisibility(view.VISIBLE); 
  90.           
  91.             mHandler.sendEmptyMessage(0); 
  92.               
  93.         } 
  94.          
  95.     } 
  96.     //声明Handler 
  97.     private Handler mHandler = new Handler(){ 
  98.         public void handleMessage(android.os.Message msg) { 
  99.             switch (msg.what) { 
  100.             case 0
  101.                   
  102.                 try { 
  103.                     Thread.sleep(3000); 
  104.                 } catch (InterruptedException e) { 
  105.                     // TODO Auto-generated catch block 
  106.                     e.printStackTrace(); 
  107.                 } 
  108.                 loadMoreData();  //加载更多数据,这里可以使用异步加载 
  109.                 adapter.notifyDataSetChanged(); 
  110.                 moreView.setVisibility(View.GONE);  
  111.                  
  112.                 if(count > 30){ 
  113.                     Toast.makeText(MainActivity.this"木有更多数据!"3000).show(); 
  114.                       listView.removeFooterView(moreView); //移除底部视图 
  115.                 } 
  116.                 Log.i(TAG, "加载更多数据"); 
  117.                 break
  118.             case 1
  119.                  
  120.                 break
  121.             default
  122.                 break
  123.             } 
  124.         }; 
  125.     }; 
  126.      

   以上就是核心的代码,具体源码可以下载附件。

效果图:

 

 

 

本文转自xuzw13 51CTO博客,原文链接:http://blog.51cto.com/xuzhiwei/1033525,如需转载请自行联系原作者

相关文章
|
3月前
|
API Android开发 开发者
Android UI设计: 什么是RecyclerView?为什么它比ListView更好?
Android UI设计: 什么是RecyclerView?为什么它比ListView更好?
31 2
|
4月前
|
XML Java Android开发
Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)
Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)
89 0
|
4月前
|
XML Android开发 数据格式
安卓-无敌解决ListView添加标题头无法正常显示的问题(歪门邪道)
安卓-无敌解决ListView添加标题头无法正常显示的问题(歪门邪道)
37 0
|
6月前
|
Java Android开发
[笔记]Android 学习一之转场动画+ViewPager+ListView简单Demo
[笔记]Android 学习一之转场动画+ViewPager+ListView简单Demo
|
11月前
|
XML Java Android开发
Android优化版ListView(附源代码)
本文是博主对Adapter(适配器)的一些理解,为了加深对Adapter的理解以及记录自己的阶段学习而写,同时也适合初学者阅读,参考本条博客的逻辑进行学习。
117 0
|
Android开发
安卓中listview点击每一条进入不同界面
安卓中listview点击每一条进入不同界面
96 0
|
Java Android开发 Kotlin
Android Studio 的ListView 的用法
Android Studio 的ListView 的用法
205 0
Android Studio 的ListView 的用法
|
Android开发
Android自定义ListView和GridView解决滑动冲突和显示不全
Android自定义ListView和GridView解决滑动冲突和显示不全
140 0
|
Android开发
Android: 解决GridView、ListView在ScrollView中出现冲突的问题
Android: 解决GridView、ListView在ScrollView中出现冲突的问题
282 0
|
XML 程序员 开发工具
【Android开发】 ListView使用实战详解,你get到了嘛?
【Android开发】 ListView使用实战详解,你get到了嘛?
260 0
【Android开发】 ListView使用实战详解,你get到了嘛?