Android重点笔记,安卓listview 懒加载的实现笔记
1、实现目的与用途
使用懒加载可降低单次访问后台的所获取的数据量,从而提高获取数据的速度,减少流量使用,加快UI界面的响应,提高用户体验度。
2、实现思路
两种实现思路:
1、先设定listview每次加载的数据项数,给listview底部项添加获取更多按钮,通过按
钮的监听事件访问后台获取更多数据后刷新listview。
2、先设定listview每次加载的数据项数,通过监听listview的滑动事件,当listview滑动至底部时访问后台服务获取更多数据,刷新listview显示。
3、实现方法要点
1、布局文件中需添加listview控件
示例代码
android:id="@+id/lv_apps"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:cacheColorHint="#00000000"
android:fastScrollEnabled="true" />
2、给加载更多按钮设置布局文件
示例代码
android:id="@+id/loadMoreButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="更多"
android:textColor="#000000"
android:textSize="25dp"
android:gravity="center"
android:background="#00000000"
android:layout_gravity="center"
android:layout_marginTop="15dp"
android:layout_marginBottom="15dp"/>
3、加载更多按钮的代码实现关键代码:
loadMoreView = getLayoutInflater().inflate(R.layout.loadmore, null);
loadMoreButton = (Button) loadMoreView
.findViewById(R.id.loadMoreButton);
lv.addFooterView(loadMoreView,null,false);//获取加载更多按钮并添加到listview的底部
//以下代码监听加载更多按钮
loadMoreButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//调用后台接口获取数据后更新列表
}
});
//以下代码实现滑动列表时加载
·publicvoidonScroll(AbsListView view,intfirstVisibleItem,intvisibleItemCount,inttotalItemCount) {
·this.visibleItemCount = visibleItemCount;
·visibleLastIndex = firstVisibleItem + visibleItemCount -1;
·}
·publicvoidonScrollStateChanged(AbsListView view,intscrollState) {
·intitemsLastIndex = adapter.getCount() -1;//数据集最后一项的索引
·intlastIndex = itemsLastIndex +1;//加上底部的loadMoreView项
·if(scrollState == OnScrollListener.SCROLL_STATE_IDLE && visibleLastIndex == lastIndex) {
·//如果是自动加载,可以在这里放置异步加载数据的代码
·Log.i("LOADMORE","loading...");
·}
·}
4、具体实现demo
1packagecom.scott.loadmore;
2
3importjava.util.ArrayList;
4
5importAndroid.app.ListActivity;
6importandroid.os.Bundle;
7importandroid.os.Handler;
8importandroid.util.Log;
9importandroid.view.View;
10importandroid.widget.AbsListView;
11importandroid.widget.AbsListView.OnScrollListener;
12importandroid.widget.Button;
13importandroid.widget.ListView;
14
15publicclassMainActivityextendsListActivityimplementsOnScrollListener {
16privateListView listView;
17privateintvisibleLastIndex =0;//最后的可视项索引
18privateintvisibleItemCount;// 当前窗口可见项总数
19privateListViewAdapter adapter;
20privateView loadMoreView;
21privateButton loadMoreButton;
22privateHandler handler =newHandler();
23
24@Override
25publicvoidonCreate(Bundle savedInstanceState) {
26super.onCreate(savedInstanceState);
27setContentView(R.layout.main);
28
29loadMoreView = getLayoutInflater().inflate(R.layout.load_more,null);
30loadMoreButton = (Button) loadMoreView.findViewById(R.id.loadMoreButton);
31
32listView = getListView();//获取id是list的ListView
33
34listView.addFooterView(loadMoreView);//设置列表底部视图
35
36initAdapter();
37
38setListAdapter(adapter);//自动为id是list的ListView设置适配器
39
40listView.setOnScrollListener(this);//添加滑动监听
41}
42
43
46privatevoidinitAdapter() {
47ArrayList items =newArrayList();
48for(inti =0; i <10; i++) {
49items.add(String.valueOf(i +1));
50}
51adapter =newListViewAdapter(this, items);
52}
53
54
57@Override
58publicvoidonScroll(AbsListView view,intfirstVisibleItem,intvisibleItemCount,inttotalItemCount) {
59this.visibleItemCount = visibleItemCount;
60visibleLastIndex = firstVisibleItem + visibleItemCount -1;
61}
62
63
66@Override
67publicvoidonScrollStateChanged(AbsListView view,intscrollState) {
68intitemsLastIndex = adapter.getCount() -1;//数据集最后一项的索引
69intlastIndex = itemsLastIndex +1;//加上底部的loadMoreView项
70if(scrollState == OnScrollListener.SCROLL_STATE_IDLE && visibleLastIndex == lastIndex) {
71//如果是自动加载,可以在这里放置异步加载数据的代码
72Log.i("LOADMORE","loading...");
73}
74}
75
76
80publicvoidloadMore(View view) {
81loadMoreButton.setText("loading...");//设置按钮文字loading
82handler.postDelayed(newRunnable() {
83@Override
84publicvoidrun() {
85
86loadData();
87
88adapter.notifyDataSetChanged();//数据集变化后,通知adapter
89listView.setSelection(visibleLastIndex - visibleItemCount +1);//设置选中项
90
91loadMoreButton.setText("load more");//恢复按钮文字
92}
93},2000);
94}
95
96
99privatevoidloadData() {
100intcount = adapter.getCount();
101for(inti = count; i
102adapter.addItem(String.valueOf(i +1));
103}
104}
105}
Android重点笔记,安卓listview 懒加载的实现笔记相关推荐
- Android androidx下的fragment懒加载
androidx下的fragment中onHiddenChanged方法不会被调用,这就导致了懒加载实现方式要变更 前置条件: BottomNavigationView+ViewPager+fragm ...
- 【Android】Fragment懒加载和ViewPager的坑
本篇文章已授权微信公众号 安卓巴士Android开发者门户 独家发布 效果 老规矩,先来看看效果 ANDROID和福利两个Fragment是设置的Fragment可见时加载数据,也就是懒加载.圆形的旋 ...
- Android实现ListView异步加载图片
转: http://www.iteye.com/topic/685986 ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源一般使用这种方法比较好,用户体验好,下面就说实现方法 ...
- android开发小技巧:实现listview异步加载图片
2019独角兽企业重金招聘Python工程师标准>>> 针对listview异步加载图片这个问题,麦子学院android开发老师讲了一种非常实用的方法,麦子学院android开发老师 ...
- Android ListView异步加载图片乱序问题,原因分析及解决方案
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/45586553 在Android所有系统自带的控件当中,ListView这个控件算是 ...
- 基于Android官方AsyncListUtil优化经典ListView分页加载机制(二)
基于Android官方AsyncListUtil优化经典ListView分页加载机制(二) 我写的附录文章1,介绍了如何使用Android官方的分页加载框架AsyncListUtil优化改进常见的Re ...
- android listview 异步加载问题
============问题描述============ 学做android,自己想模仿QQ空间做一个小demo listview异步加载图片的时候遇到了一个问题 异步加载用到了SoftReferen ...
- android viewpage预加载和懒加载问题
1.本人理解懒加载和预加载问题某种情况下可以归结为一类问题,下面我就说一下我遇到的预加载问题和懒加载问题及解决的相应方法: - [1 ] 预加载问题 描述:我用到了三个fragment ...
- android懒加载单实例,【 Android 10 设计模式 】系列 -- 单例
前言 由于源码分析的代码量比较大,大部分博客网站的内容显示页面都比较窄,显示出来的效果都异常丑陋,所以您也可以直接查看 < Thinking in Android > 来阅读这边文章,希望 ...
最新文章
- Crystal Reports 财务日记帐凭证套打设计
- My Toolkit of Node.js
- hashmap储存有向图_如何在Rust中构建向量的HashMap?
- Java并发编程实战————Executor框架与任务执行
- (转)2-sat 专题
- 软考初级——操作系统
- [转]常用的CSS命名规则
- 苹果公布了一些最新无人车进展,但,研发依然缓慢
- Qlik发布中国战略,为实现更大成功而不懈努力
- SwitchyOmega规则列表地址
- 服务器虚拟机要怎么安装,服务器虚拟机怎么安装
- R语言快速绘制多因素回归分析森林图(1)
- 办公软件不能打印能打印测试页,在office办公软件word中不能打印是什么原因
- 计算机NIC配置,在主计算机或 VM 上创建新的 NIC 团队
- 战斗在 VUCA 时代
- Git恢复已删除文件
- 给 FreeBSD 12.1 安装 GNOME3 图形界面
- ubuntu16.04 更新清华镜像源详细操作步骤
- 编写轮播图Viewpager
- 检测鼠标上滑还是下滑
热门文章
- 老兵传奇:聊聊我在华为的20年
- 细说php这么难懂,挺难懂的解决方法
- chrom禁用浏览器回退按钮不管用_什么?作为程序员你都工作了还不会用Git
- java 信使服务_java – 自行车信使/ TSPPD与OptaPlanner
- python init self_转载--------Python中:self和__init__的含义 + 为何要有self和__init__
- 【NLP】选择目标序列:贪心搜索和Beam search
- 链式链表的C风格实现
- asp.net core轻松入门之MVC中Options读取配置文件
- String ua = request.getHeader(user-agent)---ua值为null
- hdu 2196 树形dp