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,如需转载请自行联系原作者

相关文章
|
API Android开发 开发者
Android UI设计: 什么是RecyclerView?为什么它比ListView更好?
Android UI设计: 什么是RecyclerView?为什么它比ListView更好?
337 2
|
Android开发
Android RecyclerView的notify方法和动画的刷新详解(二)
Android RecyclerView的notify方法和动画的刷新详解
494 0
|
7月前
|
数据库 Android开发
Android使用EditText+Listview实现搜索效果(使用room模糊查询)
本文介绍如何在Android中使用EditText与ListView实现搜索功能,并结合Room数据库完成模糊查询。主要内容包括:Room的模糊查询语句(使用`||`代替`+`号)、布局美化(如去除ListView分割线和EditText下划线)、EditText回车事件监听,以及查询逻辑代码示例。此外,还提供了相关扩展文章链接,帮助读者深入了解ListView优化、动态搜索及Room基础操作。
491 65
|
XML Java Android开发
Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)
Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)
1325 1
|
Android开发 开发者 索引
Android实战经验之如何使用DiffUtil提升RecyclerView的刷新性能
本文介绍如何使用 `DiffUtil` 实现 `RecyclerView` 数据集的高效更新,避免不必要的全局刷新,尤其适用于处理大量数据场景。通过定义 `DiffUtil.Callback`、计算差异并应用到适配器,可以显著提升性能。同时,文章还列举了常见错误及原因,帮助开发者避免陷阱。
1042 9
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
289 2
|
安全 JavaScript 前端开发
kotlin开发安卓app,JetPack Compose框架,给webview新增一个按钮,点击刷新网页
在Kotlin中开发Android应用,使用Jetpack Compose框架时,可以通过添加一个按钮到TopAppBar来实现WebView页面的刷新功能。按钮位于右上角,点击后调用`webViewState?.reload()`来刷新网页内容。以下是代码摘要:
|
前端开发 API Android开发
25. 【Android教程】列表控件 ListView
25. 【Android教程】列表控件 ListView
731 3
|
XML Java Android开发
如何美化android程序:自定义ListView背景
如何美化android程序:自定义ListView背景
161 2
|
XML 编解码 Java
Android控件之高级控件——ListView、cardView、屏幕适配
Android控件之高级控件——ListView、cardView、屏幕适配
251 0

热门文章

最新文章