Android中动态更新ListView
其中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 用户之前触摸滑动,现在正在滑行,直到停止
下面通过代码给大家演示效果
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <ListView
- android:id="@id/android:list"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:drawSelectorOnTop="false"
- />
- </LinearLayout>
- // footer.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:orientation="horizontal"
- >
- <ProgressBar
- android:id="@+id/progressbar"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- style="\?android:attr/progressBarStyleSmall"
- />
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textSize="20.0sp"
- android:text="正在加载..."
- />
- </LinearLayout>
然后是主代码:
- public class MainActivity extends ListActivity
- {
- private ListView mListView;
- private CustomAdapter mAdapter;
- private int mScrollState;
- private View mFooter;
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //获取ListView
- mListView = getListView();
- //根据footer.xml描述创建View
- mFooter = getLayoutInflater().inflate(R.layout.footer, null);
- // 在ListView底部添加正在加载视图
- //注意:addFooterView方法需要在调用setListAdapter方法前调用!
- mListView.addFooterView(mFooter);
- mAdapter = new CustomAdapter();
- setListAdapter(mAdapter);
- //给ListView添加滚动监听器
- mListView.setOnScrollListener(new AbsListView.OnScrollListener()
- {
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState)
- {
- //记录当前状态
- mScrollState = scrollState;
- }
- @Override
- public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
- {
- // 可视的最后一个列表项的索引
- int lastVisibleItem = firstVisibleItem + visibleItemCount - 1;
- //当列表正处于滑动状态且滑动到列表底部时,执行
- if (mScrollState != AbsListView.OnScrollListener.SCROLL_STATE_IDLE
- && lastVisibleItem == totalItemCount - 1)
- {
- // 执行线程,模拟睡眠5秒钟后添加10个列表项
- new Thread()
- {
- private Handler handler = new Handler()
- {
- @Override
- public void handleMessage(Message msg)
- {
- super.handleMessage(msg);
- //增加Item数量
- mAdapter.count += 10;
- //通知数据集变化
- mAdapter.notifyDataSetChanged();
- }
- };
- @Override
- public void run()
- {
- super.run();
- try
- {
- sleep(5000);
- handler.sendEmptyMessage(0);
- } catch (InterruptedException e)
- {
- e.printStackTrace();
- }
- }
- }.start();
- }
- }
- });
- }
- private class CustomAdapter extends BaseAdapter
- {
- // 初始列表项数量
- int count = 20;
- @Override
- public int getCount()
- {
- return count;
- }
- @Override
- public Object getItem(int position)
- {
- return position;
- }
- @Override
- public long getItemId(int position)
- {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent)
- {
- TextView result = (TextView) convertView;
- //动态创建TextView添加早ListView中
- if (result == null)
- {
- result = new TextView(MainActivity.this);
- result.setTextAppearance(MainActivity.this, android.R.style.TextAppearance_Large);
- AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams
- (AbsListView.LayoutParams.FILL_PARENT,
- AbsListView.LayoutParams.WRAP_CONTENT);
- result.setLayoutParams(layoutParams);
- result.setGravity(Gravity.CENTER);
- }
- result.setText("第 " + (position + 1)+"行");
- return result;
- }
- }
- }
- 效果预览
Android中动态更新ListView相关推荐
- Android中动态生成ListView及SimpleAdapter的使用
SimpleAdapter是扩展性最好的适配器,可以定义各种你想要的布局,而且使用很方便 SimpleAdapter(Context context, List<? extends Map< ...
- android asynctask源码分析,Android通过Handler与AsyncTask两种方式动态更新ListView(附源码)...
本文实例讲述了Android通过Handler与AsyncTask两种方式动态更新ListView的方法.分享给大家供大家参考,具体如下: 有时候我们需要修改已经生成的列表,添加或者修改数据,noti ...
- 一步步教你为网站开发Android客户端---HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新ListView...
本文面向Android初级开发者,有一定的Java和Android知识即可. 文章覆盖知识点:HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新List ...
- notifyDataSetChanged() 动态更新ListView
有时候我们需要修改已经生成的列表,添加或者修改数据,notifyDataSetChanged()可以在修改适配器绑定的数组后,不用重新刷新Activity,通知Activity更新ListView.今 ...
- Android中动态初始化布局参数以及ConstraintLayout使用中遇到的坑
Android中动态初始化布局以及ConstraintLayout遇到的一个坑 ConstraintLayout是Android中的一个很强大的布局,它通过控件之间的相对定位,来完成一个layout中 ...
- android radiogroup 添加,如何在android中动态添加textview到radiogroup
大家好, 我们想动态地在radiogroup旁边添加textview.基于服务响应,我们需要在不使用xml的情况下将标签添加到radiogroup. 在某些情况下基于最长无线电如何在android中动 ...
- android中ScrollView嵌套ListView或GridView显示位置问题
Android中ScrollView中嵌套ListView或GridView时在开始进入界面时总是显示中间位置,开头的位置显示不出来.这种情况下只需要在ScrollView的父控件中添加以下两行代码即 ...
- Android中动态的更改selector中某张图片的属性
在我们平常开发的时候会有许多状态按钮,比如state_pressed,android:state_checked,或者就正常状态等等,我们做这样的效果通常需要三个文件,一张是按下的图片,一张是正常状态 ...
- Android 中动态的向布局中添加控件
先看一下效果图: 注: 这里使用的是一个自定义的布局文件,你可以向这个布局文件中添加任何控件,它也会动态的依据控件 的大小,动态的排列控件的分布 注:这里使用到的更新界面的方法:http://blog ...
最新文章
- Swift Tips - 在 Swift 中自定义下标访问
- [云炬创业基础笔记]第六章商业模式测试24
- SOCKET编程中,select()函数的作用
- mysql查看是否开启定时器_Mysql 查看定时器 打开定时器 设置定时器时间
- Python黑帽编程 3.4 跨越VLAN
- 信息的哲学--从信息到数据存储,再到数据保护
- 国内5家云服务厂商 HTTPS 安全性测试横向对比
- HTTP访问控制(CORS)踩坑小记
- HikariDataSource 配置详解
- SpringBoot 与 Kotlin 完美交融
- gitee免费部署静态网站
- python获取键盘按键键值_python获取键值
- android 内存至少一半,极客修:为什么iPhone比安卓内存小,却更流畅?
- ‘parent.relativePath‘ points at com.xxx instead of org.springframework.boot:spring-boot-starter的快速解决
- Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析 (iic驱动框架,i2c驱动框架)...
- 【快速检索,稳定出版,强大委员会Speaker阵容】ICCCS 2022|第7届通信计算机大会
- 液体点滴速度监控报警装置(51单片机)
- ZOJ 4062 Plants vs. Zombies(二分)
- inkscape制作向日葵
- (二)第二部分:Linux下HTTP服务器的搭建
热门文章
- 【Flutter】FutureBuilder 异步编程 ( FutureBuilder 构造方法 | AsyncSnapshot 异步计算 )
- 【Android 插件化】“ 插桩式 “ 插件化框架 ( 代理 Activity 组件开发 )
- 【Android APT】注解处理器 ( 根据注解生成 Java 代码 )
- 【Android 异步操作】Handler ( 主线程中的 Handler 与 Looper | Handler 原理简介 )
- 用WORD2010写博客,并发送至博客园
- [CQOI2018] 异或序列
- Android加载大图片(压缩)
- 【在还原SQL Server数据库时发生对于服务器“XXX”操作系统错误】很实用的解决方案...
- 五大HR所不认同的跳槽理由(转)
- 运动学与雅可比矩阵举例