Android listView滑动刷新代码(分页功能)

简介:

三个代码都是从网上下载来的,但是导入到eclipse里面以后,中文注释出现乱码,所以我文章里面的注释有很多可能是自己添加的,如有不准确的地方,敬请谅解和留言告知!

这个例子是listview一开始显示10个,下拉listview,就会更新添加列表,知道第50个。

       首先,布局文件是非常简单,可以直接看代码,首先,先看下自定义的一个简单的Adapter:

[java]  view plain copy
  1. class listViewAdapter extends BaseAdapter {  
  2.         int count = 10;  
  3.   
  4.         public int getCount() {  
  5.             return count;  
  6.         }  
  7.   
  8.         public Object getItem(int pos) {  
  9.             return pos;  
  10.         }  
  11.   
  12.         public long getItemId(int pos) {  
  13.             return pos;  
  14.         }  
  15.   
  16.         public View getView(int pos, View v, ViewGroup p) {  
  17.             TextView view;  
  18.             if (v==null) {  
  19.                 view = new TextView(MainActivity.this);  
  20.             }  
  21.             else {  
  22.                 view=(TextView)v;  
  23.             }  
  24.             view.setText("ListItem " + pos);  
  25.             view.setTextSize(20f);  
  26.             view.setGravity(Gravity.CENTER);  
  27.             view.setHeight(60);  
  28.             return view;  
  29.         }  
  30.     }  

在这里初始化的count,就是listview的item个数是十个,当滑动的时候,再动态增加。

在看一下,在oncreate方法里面通过代码把控件添加进去。

[java]  view plain copy
  1. //线性布局  
  2.         LinearLayout layout = new LinearLayout(this);  
  3.        //设置布局 水平方向  
  4.         layout.setOrientation(LinearLayout.HORIZONTAL);  
  5.          //进度条  
  6.         progressBar = new ProgressBar(this);  
  7.          //进度条显示位置  
  8.         progressBar.setPadding(00150);  
  9.         //把进度条加入到layout中  
  10.         layout.addView(progressBar, mLayoutParams);  
  11.         //文本内容  
  12.         TextView textView = new TextView(this);  
  13.         textView.setText("加载中。。。");  
  14.         textView.setGravity(Gravity.CENTER_VERTICAL);  
  15.         //把文本加入到layout中  
  16.         layout.addView(textView, FFlayoutParams);  
  17.         //设置layout的重力方向,即对齐方式是  
  18.         layout.setGravity(Gravity.CENTER);  
  19.           
  20.         ///设置ListView的页脚layout  
  21.         loadingLayout = new LinearLayout(this);  
  22.         loadingLayout.addView(layout, mLayoutParams);  
  23.         loadingLayout.setGravity(Gravity.CENTER);  
  24.           
  25.         //得到一个ListView用来显示条目  
  26.         listView = getListView();  
  27.         //添加到页脚显示  
  28.         listView.addFooterView(loadingLayout);  
  29.         //给ListView添加适配器  
  30.         setListAdapter(adapter);  
  31.         //给ListView注册滚动监听  
  32.         listView.setOnScrollListener(this);  

这里面用到了两个layout属性,它们的声明是:

[java]  view plain copy
  1. /** 
  2.      * 设置布局显示属性 
  3.      */  
  4.     private LayoutParams mLayoutParams =new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);  
  5.     /** 
  6.      * 设置布局显示目标最大化属性 
  7.      */  
  8.     private LayoutParams FFlayoutParams =new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);  
  9.       

       最重要的代码如下:重写了onScroll和onScrollStateChanged两个方法:

[java]  view plain copy
  1. @Override  
  2.     public void onScroll(AbsListView v, int firstVisibleItem,int visibleItemCount, int totalItemCount) {  
  3.         Log.v("@@@@@@""Scroll>>>first: " + firstVisibleItem + ", visible: " + visibleItemCount + ", total: " + totalItemCount);  
  4.         lastItem = firstVisibleItem + visibleItemCount - 1;  
  5.         Log.i("@@@@@@" , "Scroll>>>lastItem:" + lastItem);  
  6.         //显示50条ListItem,即0-49,因为onScroll是在“滑动”执行过之后才触发,所以用adapter.count<=41作条件  
  7.         if (adapter.count<=41) {  
  8.             if (firstVisibleItem+visibleItemCount==totalItemCount) {  
  9.                 adapter.count += 10;  
  10.                 adapter.notifyDataSetChanged();  
  11.                 listView.setSelection(lastItem);  
  12.                 Log.v("@@@@@@","onScroll  "+adapter.count);  
  13.                 int currentPage=adapter.count/10;  
  14.                 Toast.makeText(getApplicationContext(), "第"+currentPage+"页", Toast.LENGTH_LONG).show();  
  15.             }  
  16.         }else {  
  17.              listView.removeFooterView(loadingLayout);   
  18.         }         
  19.     }  
  20.     @Override  
  21.     public void onScrollStateChanged(AbsListView v, int state) {  
  22.         if (lastItem == adapter.count && state == OnScrollListener.SCROLL_STATE_IDLE) {  
  23.             Log.v("@@@@@@""ScrollStateChanged>>>state:"+state+"lastItem:" + lastItem);  
  24.             if (adapter.count<=41) {  
  25.                 adapter.count += 10;  
  26.                 adapter.notifyDataSetChanged();  
  27.                 Log.v("@@@@@@","onScrollStateChanged  "+adapter.count);  
  28.             }  
  29.         }  
  30.     }  

先说下onScroll方法的几个参数的意义:

      官方解释如下:

  • view
  • The view whose scroll state is being reported
  • firstVisibleItem
  • the index of the first visible cell (ignore if visibleItemCount == 0)
  • visibleItemCount
  • the number of visible cells
  • totalItemCount
  • the number of items in the list adaptor

  1. firstVisibleItem:当前能看见的第一个列表项ID(从0开始)    
  2. visibleItemCount:当前能看见的列表项总数(小半个也算,部分显示的都算)   
  3. totalItemCount:列表项共数

[java]  view plain copy
  1. lastItem = firstVisibleItem + visibleItemCount - 1;  
获取最下面那个item的id(position)值.

[java]  view plain copy
  1. if (firstVisibleItem+visibleItemCount==totalItemCount) {  
  2.                 adapter.count += 10;  
  3.                 adapter.notifyDataSetChanged();  
  4.                 listView.setSelection(lastItem);  
  5.                 Log.v("@@@@@@","onScroll  "+adapter.count);  
  6.                 int currentPage=adapter.count/10;  
  7.                 Toast.makeText(getApplicationContext(), "第"+currentPage+"页", Toast.LENGTH_LONG).show();  
  8.             }  
如果listitem个数不足50,继续添加,并把listview的焦点放到最下面的item上。

这样的话,整个就比较容易理解了。


在listview里面还有几个方法:

listView.getFirstVisiblePosition()是获得现在屏幕第一个ListItem(第一个ListItem部分显示也算)

listView.getLastVisiblePosition()现时屏幕最后一个ListItem(最后ListItem要完全显示出来才算)


相关文章
|
8月前
|
数据库 Android开发
Android使用EditText+Listview实现搜索效果(使用room模糊查询)
本文介绍如何在Android中使用EditText与ListView实现搜索功能,并结合Room数据库完成模糊查询。主要内容包括:Room的模糊查询语句(使用`||`代替`+`号)、布局美化(如去除ListView分割线和EditText下划线)、EditText回车事件监听,以及查询逻辑代码示例。此外,还提供了相关扩展文章链接,帮助读者深入了解ListView优化、动态搜索及Room基础操作。
557 65
|
8月前
|
Java Android开发
Android背景颜色滑动渐变效果(上下滑动,左右滑动)
本文分享了一种通过ScrollView实现滑动变色效果的简单方法。主要步骤包括:1) 在布局中添加ScrollView并确保内容可滑动;2) 获取屏幕高度;3) 获取控件高度;4) 使用GradientDrawable设置渐变颜色;5) 根据控件与屏幕高度比例动态调整颜色数量。示例代码展示了如何在滑动时根据比例改变背景颜色,实现流畅的视觉效果。
234 0
|
6月前
|
编解码 Java Android开发
安卓虚拟摄像头免root版,虚拟摄像头替换真实摄像头,jar代码开源分享
通过动态替换摄像头输入流的方式实现虚拟摄像头功能,代码经过简化展示核心逻辑。实际开发中还需要考虑视频编解码优化
|
9月前
|
NoSQL 应用服务中间件 PHP
布谷一对一直播源码android版环境配置流程及功能明细
部署需基于 CentOS 7.9 系统,硬盘不低于 40G,使用宝塔面板安装环境,包括 PHP 7.3(含 Redis、Fileinfo 扩展)、Nginx、MySQL 5.6、Redis 和最新 Composer。Swoole 扩展需按步骤配置。2021.08.05 后部署需将站点目录设为 public 并用 ThinkPHP 伪静态。开发环境建议 Windows 操作系统与最新 Android Studio,基础配置涉及 APP 名称修改、接口域名更换、包名调整及第三方登录分享(如 QQ、微信)的配置,同时需完成阿里云与腾讯云相关设置。
|
Android开发
Android开发表情emoji功能开发
本文介绍了一种在Android应用中实现emoji表情功能的方法,通过将图片与表情字符对应,实现在`TextView`中的正常显示。示例代码展示了如何使用自定义适配器加载emoji表情,并在编辑框中输入或删除表情。项目包含完整的源码结构,可作为开发参考。视频演示和源码详情见文章内链接。
336 4
Android开发表情emoji功能开发
|
安全 Android开发 iOS开发
Android vs iOS:探索移动操作系统的设计与功能差异###
【10月更文挑战第20天】 本文深入分析了Android和iOS两个主流移动操作系统在设计哲学、用户体验、技术架构等方面的显著差异。通过对比,揭示了这两种系统各自的独特优势与局限性,并探讨了它们如何塑造了我们的数字生活方式。无论你是开发者还是普通用户,理解这些差异都有助于更好地选择和使用你的移动设备。 ###
539 3
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
329 1
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异:从代码到用户体验
【10月更文挑战第5天】在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。它们在技术架构、开发环境及用户体验上有着根本的不同。本文通过比较这两种平台的开发过程,揭示背后的设计理念和技术选择如何影响最终产品。我们将深入探讨各自平台的代码示例,理解开发者面临的挑战,以及这些差异如何塑造用户的日常体验。
|
Android开发 开发者
Android平台无纸化同屏如何实现实时录像功能
Android平台无纸化同屏,如果需要本地录像的话,实现难度不大,只要复用之前开发的录像模块的就可以,对我们来说,同屏采集这块,只是数据源不同而已,如果是自采集的其他数据,我们一样可以编码录像。
158 0
|
3月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
337 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡

热门文章

最新文章