首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android中动态更新ListView

Android中动态更新ListView

作者头像
欢醉
发布于 2018-01-22 02:44:56
发布于 2018-01-22 02:44:56
2.2K00
代码可运行
举报
文章被收录于专栏:james大数据架构james大数据架构
运行总次数:0
代码可运行

在使用ListView时,会遇到当ListView列表滑动到最底端时,添加新的列表项的问题,本文通过代码演示如何动态的添加新的列表项到ListView中。 实现步骤:调用ListView的setOnScrollListener()方法设置滑动监听器,实现OnScrollListener接口的方法,判断当列表滑动到最低端时,加载新的列表项。 其中OnScrollListener接口需要实现如下两个方法: onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) view 报告滑动状态的视图 firstVisibleItem 可视的第一个列表项的索引 visibleItemCount 可视的列表项个数 totalItemCount 总共的列表项个数 onScrollStateChanged(AbsListView view, int scrollState) view 报告滑动状态的视图 scrollState 滑动状态 滑动状态包括 SCROLL_STATE_IDLE : 0  视图没有滑动 SCROLL_STATE_TOUCH_SCROLL : 1  用户正在触摸滑动,手指仍在屏幕上 SCROLL_STATE_FLING : 2  用户之前触摸滑动,现在正在滑行,直到停止 下面通过代码给大家演示效果 main.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical"
 4     android:layout_width="fill_parent"
 5     android:layout_height="fill_parent"
 6     >
 7     <ListView
 8         android:id="@id/android:list"
 9         android:layout_width="match_parent"
10         android:layout_height="match_parent"
11         android:layout_weight="1"
12         android:drawSelectorOnTop="false"
13         />
14 </LinearLayout>

footer.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="fill_parent"
 4     android:layout_height="wrap_content"
 5     android:gravity="center"
 6     android:orientation="horizontal"
 7     >
 8     <ProgressBar
 9         android:id="@+id/progressbar"
10         android:layout_width="wrap_content"
11         android:layout_height="wrap_content"
12         style="\?android:attr/progressBarStyleSmall"
13         />
14     <TextView
15         android:layout_width="wrap_content"
16         android:layout_height="wrap_content"
17         android:textSize="20.0sp"
18         android:text="正在加载..."
19         />
20 </LinearLayout>

MainActicity.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  1 package com.szy.listview;
  2 
  3 import android.app.ListActivity;
  4 import android.os.Bundle;
  5 import android.os.Handler;
  6 import android.os.Message;
  7 import android.view.Gravity;
  8 import android.view.View;
  9 import android.view.ViewGroup;
 10 import android.widget.AbsListView;
 11 import android.widget.BaseAdapter;
 12 import android.widget.ListView;
 13 import android.widget.TextView;
 14 
 15 /**
 16  *@author coolszy
 17  *@date 2012-3-27
 18  *@blog http://blog.92coding.com
 19  */
 20 public class MainActivity extends ListActivity
 21 {
 22     private ListView mListView;
 23     private CustomAdapter mAdapter;
 24     private int mScrollState;
 25     private View mFooter;
 26 
 27     @Override
 28     public void onCreate(Bundle savedInstanceState)
 29     {
 30         super.onCreate(savedInstanceState);
 31         setContentView(R.layout.main);
 32 
 33         //获取ListView
 34         mListView = getListView();
 35         //根据footer.xml描述创建View
 36         mFooter = getLayoutInflater().inflate(R.layout.footer, null);
 37         // 在ListView底部添加正在加载视图
 38         //注意:addFooterView方法需要在调用setListAdapter方法前调用!
 39         mListView.addFooterView(mFooter);
 40         mAdapter = new CustomAdapter();
 41         setListAdapter(mAdapter);
 42         //给ListView添加滚动监听器
 43         mListView.setOnScrollListener(new AbsListView.OnScrollListener()
 44         {
 45             @Override
 46             public void onScrollStateChanged(AbsListView view, int scrollState)
 47             {
 48                 //记录当前状态
 49                 mScrollState = scrollState;
 50             }
 51 
 52             @Override
 53             public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
 54             {
 55                 // 可视的最后一个列表项的索引
 56                 int lastVisibleItem = firstVisibleItem + visibleItemCount - 1;
 57                 //当列表正处于滑动状态且滑动到列表底部时,执行
 58                 if (mScrollState != AbsListView.OnScrollListener.SCROLL_STATE_IDLE
 59                     && lastVisibleItem == totalItemCount - 1)
 60                 {
 61                     // 执行线程,模拟睡眠5秒钟后添加10个列表项
 62                     new Thread()
 63                     {
 64 
 65                         private Handler handler = new Handler()
 66                         {
 67 
 68                             @Override
 69                             public void handleMessage(Message msg)
 70                             {
 71                                 super.handleMessage(msg);
 72                                 //增加Item数量
 73                                 mAdapter.count += 10;
 74                                 //通知数据集变化
 75                                 mAdapter.notifyDataSetChanged();
 76                             }
 77 
 78                         };
 79 
 80                         @Override
 81                         public void run()
 82                         {
 83                             super.run();
 84                             try
 85                             {
 86                                 sleep(5000);
 87                                 handler.sendEmptyMessage(0);
 88                             } catch (InterruptedException e)
 89                             {
 90                                 e.printStackTrace();
 91                             }
 92                         }
 93 
 94                     }.start();
 95                 }
 96             }
 97         });
 98     }
 99 
100     private class CustomAdapter extends BaseAdapter
101     {
102         // 初始列表项数量
103         int count = 20; 
104 
105         @Override
106         public int getCount()
107         {
108             return count;
109         }
110 
111         @Override
112         public Object getItem(int position)
113         {
114             return position;
115         }
116 
117         @Override
118         public long getItemId(int position)
119         {
120             return position;
121         }
122 
123         @Override
124         public View getView(int position, View convertView, ViewGroup parent)
125         {
126             TextView result = (TextView) convertView;
127             //动态创建TextView添加早ListView中
128             if (result == null)
129             {
130                 result = new TextView(MainActivity.this);
131                 result.setTextAppearance(MainActivity.this, android.R.style.TextAppearance_Large);
132                 AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams
133                                                         (AbsListView.LayoutParams.FILL_PARENT,
134                                                         AbsListView.LayoutParams.WRAP_CONTENT);
135                 result.setLayoutParams(layoutParams);
136                 result.setGravity(Gravity.CENTER);
137             }
138             result.setText("第 " + (position + 1)+"行");
139             return result;
140         }
141     }
142 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013-08-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
羊皮书APP(Android版)开发系列(二十一)双联动分组ListView,类似于外卖点餐
ok,到这里就完成了双ListView联动的实现,可以到这里下载运行体验https://github.com/wjie2014/DoubleListViewLinkage。
热心的程序员
2018/08/30
1.3K0
羊皮书APP(Android版)开发系列(二十一)双联动分组ListView,类似于外卖点餐
基于SwipeRefreshLayout的上拉加载控件
距离上一篇博客,居然已经过了大半年的时间,时间过得真快啊!CSDN最近大改版,各种用户体验也是被无数人吐槽,让人提不起任何写博客的兴趣,不过,该写的博客还是必须得写,话不多话,直接进入正题。 现在项目中用列表来展示数据比比皆是,ListView和RecyclerView大家也是耳熟能详。实际项目中,后台肯定的接口肯定都是分页的,那么,分页加载也是自然而然的事,下面基于Google原生的下拉刷新控件SwipeRefreshLayout,实现上拉加载更多的功能。直接上代码: CustomSwipeRefreshLayout.java
全栈程序员站长
2022/09/12
1K0
基于SwipeRefreshLayout的上拉加载控件
android中listview分页载入数据
前段时间做的新浪微博项目一直想实现listview分页载入数据,今天最终实现了,哈哈!感觉挺好的,今天又写了个demo给大家分享下。
全栈程序员站长
2022/07/14
1.1K0
android中listview分页载入数据
ListView详解
当然还有其他adapter。个人认为至少掌握这两种。只是字符串就用ArrayAdapter,用到图文混排的就用自定义的
提莫队长
2019/02/21
1.3K0
Android开发ListView使用OnScrollListener实现分页加载数据
上篇博文和大家分享了下拉刷新,这是一个用户体验很好的操作方式。新浪微薄就是使用这样的方式的典型。
全栈程序员站长
2022/07/06
1.3K0
Android开发ListView使用OnScrollListener实现分页加载数据
一款基于Material Desgin设计的APP
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/50413625
Hankkin
2018/09/06
7960
一款基于Material Desgin设计的APP
PinnedSectionListView详细介绍(android开源项目)
我在之前的博客http://blog.csdn.net/lxj1137800599/article/details/51752970 介绍过PinnedSectionListView。但是对于PinnedSectionListView.java 这个文件没有细讲。由于研究源码也是程序猿的一种能力,所以我专门研究了这个java文件。 现在我已经重新输入了adapter中的数据。界面如下:
提莫队长
2019/02/21
7590
Android项目实战(二十):浅谈ListView悬浮头部展现效果
  先看下效果:需求是 滑动列表 ,其中一部分视图(粉丝数,关注数这一部分)在滑动到顶端的时候不消失,而是停留在整个界面头部。 我们先分析要解决的问题: 1、如何实现列表ListView顶部视图跟随L
听着music睡
2018/05/18
1.5K0
SwipeRefreshLayout实现上拉下拉刷新
1:在布局中添加SwipeRefreshLayout和Listview组件 [html] view plain copy <?xml version="1.0" encoding="utf-8
xiangzhihong
2018/02/02
1.1K0
android 面试之listview
ListView优化一直是一个老生常谈的问题,不管是面试还是平常的开发中,ListView永远不会被忽略掉,那么这篇文章我们来看看如何最大化的优化ListView的性能。· 1.在adapter中的getView方法中尽量少使用逻辑· 2.尽最大可能避免GC· 3.滑动的时候不加载图片· 4.将ListView的scrollingCache和animateCache设置为false· 5.item的布局层级越烧越好· 6.使用ViewHolder1.在adapter中的getView方法中尽量少使用逻辑不要
xiangzhihong
2018/02/02
8070
定制SwipeRefreshLayout
SwipeRefreshLayout大家都用过,google推出的,亲生儿子,兼容性自然最好!可是SwipeRefreshLayout只支持下拉刷新,没有上拉加载更多,这样是没办法满足我们的需要的,所以本文就对它进行一下定制,加上下拉刷新。
全栈程序员站长
2022/09/12
1.3K0
SwipeRefreshLayout实现上滑加载更多[通俗易懂]
在我们的项目中,需要用到许多下拉刷新和上滑加载的操作,不说什么没用的,直接来介绍SwipeRefreshLayout的扩展用法。
全栈程序员站长
2022/09/12
3.8K0
SwipeRefreshLayout实现上滑加载更多[通俗易懂]
Android学习之listview的下拉刷新、上拉载入
本例是在上例的基础上完成的。本例实现的listview上拉载入、下拉刷新功能,是在开源网站上别人写好的listview,主要是对listview的控件进行重写,添加了footer和header。 1.
水击三千
2018/02/27
2.3K0
Android学习之listview的下拉刷新、上拉载入
Android利用V4包中的SwipeRefreshLayout实现上拉加载
基本原理 上拉加载或者说滚动到底部时自动加载,都是通过判断是否滚动到了ListView或者其他View的底部,然后触发相应的操作,这里我们以 ListView来说明。因此我们需要在监听ListView的滚动事件,当ListView滚动到底部时自动触发加载操作;但是当用户支持手指滑动屏 幕,没有滚动时,我们也需要让它加载,因此这种情形就是上拉加载更多。所以我们需要在触摸事件里面进行判断,如果到了底部,且用户是上拉操作,那么执行加 载更多。 时间有限,直接上代码吧。 实现代码 /** * 继承自SwipeRe
庞小明
2018/03/07
8960
Android利用V4包中的SwipeRefreshLayout实现上拉加载
ListView数据动态更新
经过前面几期的学习,关于ListView的一些基本用法大概学的差不多了,但是你可能发现了,所有ListView里面要填充的数据都是静态的,但在实际开发中,这些数据往往都是动态变化的,比如数据内容发生改变、增加几行、或者删除几行,这就涉及到ListView数据的更新问题。 接下来通过一个简单的示例程序来学习ListView的数据更新。 继续使用WidgetSample工程,在app/main/res/layout/目录下创建updatedata_layout.xml文件,在其中填充如下
分享达人秀
2018/02/02
2.4K0
ListView数据动态更新
Android自定义组合控件---教你如何自定义下拉刷新和左滑删除
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/80122918
Hankkin
2018/09/06
1.5K0
Android自定义组合控件---教你如何自定义下拉刷新和左滑删除
自定义SwipeRefreshLayout实现ListView上拉加载下拉刷新
说实话现在大部分人都不在用ListView了,不过说实话如果仅仅是普通的列表其实用哪个都无所谓的。 可能有人会说有好多第三方的下拉刷新上拉加载的框架,但是我觉得吧,有些东西自己能实现的就还是用自己写的好。 不罗嗦了,直接上代码,注释都已写好
longzeqiu
2019/08/14
1.4K0
Android Heroes Reading Notes 2
《Android群英传》读书笔记 (2) 第三章 控件架构与自定义控件详解 + 第四章 ListView使用技巧 + 第五章 Scroll分析
宅男潇涧
2018/08/01
6430
Android Heroes Reading Notes 2
相关推荐
羊皮书APP(Android版)开发系列(二十一)双联动分组ListView,类似于外卖点餐
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档