android ListView常用知识总结
先来看下项目主要内容:
ListView中填充数据:
重现添加数据后置顶,具体阐明了决解方案,如下:
刷新适配器后没有响应的错误现象,具体阐明了决解方案,如下:
正确示范一:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990/**
* 正确示范一(正确运用,修改原始对象<Activity里面>对应引用<Adapter里面>也改变)
*
* @author johnny
*
*/
public
class
ThreeListViewActivity
extends
Activity {
private
ListView mContentLv;
private
OneAdapter adapter;
private
ArrayList<HashMap<String, String>> arrayList=
new
ArrayList<HashMap<String,String>>();
@Override
protected
void
onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_listview);
mContentLv = (ListView) findViewById(R.id.lv_content);
adapter=
new
OneAdapter(
this
,arrayList);
mContentLv.setAdapter(adapter);
initData();
ToastUtils.show(getApplicationContext(),
"6秒后延迟添加,刷新adapter"
);
//开启异步线程
setData();
}
private
void
setData() {
new
Thread(
new
Runnable() {
@Override
public
void
run() {
// TODO Auto-generated method stub
try
{
//做一些耗时的操作后添加数据,之后刷新adapter
Thread.sleep(
6000
);
}
catch
(InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//可能这个时候才重网络上获取到了新数据,,现在开始添加数据
HashMap<String, String> hashMap;
for
(
int
i =
0
; i <
5
; i++) {
hashMap =
new
HashMap<String, String>();
if
(i %
4
==
0
) {
hashMap.put(
"name"
,
"大海"
);
hashMap.put(
"address"
,
"上海"
);
}
else
if
(i %
4
==
1
) {
hashMap.put(
"name"
,
"老马"
);
hashMap.put(
"address"
,
"深圳"
);
}
else
if
(i %
4
==
2
) {
hashMap.put(
"name"
,
"小三"
);
hashMap.put(
"address"
,
"东莞"
);
}
else
if
(i %
4
==
3
) {
hashMap.put(
"name"
,
"老哥"
);
hashMap.put(
"address"
,
"北京"
);
}
arrayList.add(hashMap);
}
handler.sendEmptyMessage(
1
);
}
}).start();
}
Handler handler =
new
Handler(){
public
void
handleMessage(android.os.Message msg) {
adapter.notifyDataSetChanged();
//没有重现设置adapter,只做了刷新数据,listview不会到顶。
ToastUtils.show(getApplicationContext(),
"adapter共有"
+adapter.getAllList().size()+
"个数据,activity共有"
+arrayList.size()+
"个数据,刷新结束!"
);
};
};
private
void
initData() {
HashMap<String, String> hashMap;
for
(
int
i =
0
; i <
15
; i++) {
hashMap =
new
HashMap<String, String>();
if
(i %
4
==
0
) {
hashMap.put(
"name"
,
"小明"
);
hashMap.put(
"address"
,
"上海"
);
}
else
if
(i %
4
==
1
) {
hashMap.put(
"name"
,
"老马"
);
hashMap.put(
"address"
,
"深圳"
);
}
else
if
(i %
4
==
2
) {
hashMap.put(
"name"
,
"小三"
);
hashMap.put(
"address"
,
"东莞"
);
}
else
if
(i %
4
==
3
) {
hashMap.put(
"name"
,
"老哥"
);
hashMap.put(
"address"
,
"北京"
);
}
arrayList.add(hashMap);
}
}
}
正确示范二:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798/**
* 正确示范二(正确运用,Activity里面对象不用作Adapter原始对象,只做数据的备份。
* 这也是本人比较喜欢的写法,原因:很多时候我们会不经意间改变Activity里面的数据源后导致ListView的改变,
* 导致出错后排除错误难解<正确示范一,当然也有好处,比如:改变Activity数据后,不需要再做多余的Adapter数据的更改,方便>)
*
* @注意 这里只是数据添加方案本人赞成写法,具体完整结合adapter请移步个人推荐一或二<有错误示范,才能慢慢完善改变,错误何尝不是一种成长>
* @author johnny
*
*/
public
class
FourListViewActivity
extends
Activity {
private
ListView mContentLv;
private
OneAdapter adapter;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_listview);
mContentLv = (ListView) findViewById(R.id.lv_content);
adapter=
new
OneAdapter(
this
);
mContentLv.setAdapter(adapter);
initData();
ToastUtils.show(getApplicationContext(),
"6秒后延迟添加,刷新adapter"
);
//开启异步线程
setData();
}
private
void
setData() {
new
Thread(
new
Runnable() {
@Override
public
void
run() {
// TODO Auto-generated method stub
try
{
//做一些耗时的操作后添加数据,之后刷新adapter
Thread.sleep(
6000
);
}
catch
(InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ArrayList<HashMap<String, String>> arrayList=
new
ArrayList<HashMap<String,String>>();
//可能这个时候才重网络上获取到了新数据,,现在开始添加数据
HashMap<String, String> hashMap;
for
(
int
i =
0
; i <
5
; i++) {
hashMap =
new
HashMap<String, String>();
if
(i %
4
==
0
) {
hashMap.put(
"name"
,
"大海"
);
hashMap.put(
"address"
,
"上海"
);
}
else
if
(i %
4
==
1
) {
hashMap.put(
"name"
,
"老马"
);
hashMap.put(
"address"
,
"深圳"
);
}
else
if
(i %
4
==
2
) {
hashMap.put(
"name"
,
"小三"
);
hashMap.put(
"address"
,
"东莞"
);
}
else
if
(i %
4
==
3
) {
hashMap.put(
"name"
,
"老哥"
);
hashMap.put(
"address"
,
"北京"
);
}
//这里添加的只是在临时数据存储的对象,adapter里面不属于同一个对象
arrayList.add(hashMap);
}
//和正确范例一区别在于此,每次都需要把数据copy到adapter里面
adapter.setAddList(arrayList);
handler.sendEmptyMessage(
1
);
}
}).start();
}
Handler handler =
new
Handler(){
public
void
handleMessage(android.os.Message msg) {
adapter.notifyDataSetChanged();
//没有重现设置adapter,只做了刷新数据,ListView不会到顶。
ToastUtils.show(getApplicationContext(),
"adapter共有"
+adapter.getAllList().size()+
"个数据。"
);
};
};
private
void
initData() {
ArrayList<HashMap<String, String>> arrayList=
new
ArrayList<HashMap<String,String>>();
HashMap<String, String> hashMap;
for
(
int
i =
0
; i <
15
; i++) {
hashMap =
new
HashMap<String, String>();
if
(i %
4
==
0
) {
hashMap.put(
"name"
,
"小明"
);
hashMap.put(
"address"
,
"上海"
);
}
else
if
(i %
4
==
1
) {
hashMap.put(
"name"
,
"老马"
);
hashMap.put(
"address"
,
"深圳"
);
}
else
if
(i %
4
==
2
) {
hashMap.put(
"name"
,
"小三"
);
hashMap.put(
"address"
,
"东莞"
);
}
else
if
(i %
4
==
3
) {
hashMap.put(
"name"
,
"老哥"
);
hashMap.put(
"address"
,
"北京"
);
}
arrayList.add(hashMap);
}
adapter.setAddList(arrayList);
}
}
ListView 适配器推荐写法:
- 123456789101112131415161718192021222324252627282930313233
@Override
public
View getView(
int
position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v = convertView;
//判断是否为null,这是每个要做复用的都要写的
if
(v ==
null
) {
v = inflater.inflate(R.layout.lv_item,
null
);
}
//相比之下
//写法太集中,没有细化
/*if (null == convertView) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.lv_item, null);
holder.mNameTv = (TextView) convertView.findViewById(R.id.tv_name);
holder.mAddressTv = (TextView) convertView.findViewById(R.id.tv_address);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}*/
//简洁,把初始化控件放到了ViewHolder里面,是的getView方法更清晰简洁,只需要做数据的赋值和复杂的逻辑,没有混为一滩
ViewHolder holder = (ViewHolder) v.getTag();
if
(holder ==
null
) {
holder =
new
ViewHolder(v);
v.setTag(holder);
}
HashMap<String, String> hashMap = getItem(position);
holder.mNameTv.setText(hashMap.get(
"name"
));
holder.mAddressTv.setText(hashMap.get(
"address"
));
return
v;
}
方法二:
- 12345678910111213141516171819
@Override
public
View getView(
int
position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v = convertView;
//判断是否为null,这是每个要做复用的都要写的
if
(v ==
null
) {
v = inflater.inflate(R.layout.lv_item,
null
);
}
//简洁,方便,快速
TextView mNameTv=ViewHolder.get(v, R.id.tv_name);
TextView mAddressTv=ViewHolder.get(v, R.id.tv_address);
HashMap<String, String> hashMap = getItem(position);
mNameTv.setText(hashMap.get(
"name"
));
mAddressTv.setText(hashMap.get(
"address"
));
return
v;
}
ListView中疑难杂症:
只做截图具体下载代码查看:不需要豆子
e
另链接单选删除帖子效果如下:
地址:点击进入
×××:
ListView中常用知识总结
转载于:https://blog.51cto.com/wangyubin/1361691
android ListView常用知识总结相关推荐
- Android ListView常用用法
ListView是比较常用的控件,但一直都觉得创建ListView步骤有点繁琐,故在此总结一下,方便查阅. 程序效果是实现一个ListView,ListView里面有标题,内容和图片,并加入点击和长按 ...
- Android ListView常用用法(结合长按、数据库等)
http://www.iteye.com/topic/540423 ListView是比较常用的控件,但一直都觉得创建ListView步骤有点繁琐,故在此总结一下,方便查阅. 程序效果是实现一个Lis ...
- Android ListView常用用法(二)
来自:51CTO论坛 原帖:http://mobile.51cto.com/android-254823.htm Android开发:实现带图片和checkbox的listview 项目要用到一个li ...
- Android群英传知识点回顾——第四章:ListView常用优化技巧
Android群英传知识点回顾--第四章:ListView常用优化技巧 知识点目录 4.1 ListView常用优化技巧 4.1.1 使用ViewHolder模式提高效率 4.1.2 设置项目间分割线 ...
- Android中常用的设计模式
一:参考文档 先介绍参考文档(或许我们更容易明白):另记录本人可参考 QQ15 MobileSafe 两个Demo 有哪些在实际 Android 项目中用到的设计模式? Android开发中常见的设计 ...
- android开发常用组件和第三方库(二)
TimLiu-Android 自己总结的Android开源项目及库. github排名 https://github.com/trending, github搜索:https://github.com ...
- android培训总结范文,android培训基础知识总结
android培训基础知识总结,有需要的朋友可以参考下. android培训之1. Android的四大组件是哪些,它们的作用? Activity:Activity是Android程序与用户交互的窗口 ...
- Android ListView (多个adapter 说明)
最近维护项目,项目里面使用的都是ListView 这里也对ListView 回顾一下 以下 demo 地址 ListView 在Android 里面用来实现列表的, 在xml 中创建ListView ...
- Android ListView 自定义背景后 滚动时的背景变黑问题
ListView是常用的显示控件,默认背景是和系统窗口一样的透明色,如果给ListView加上背景图片,或者背景颜色时,滚动时listView会黑掉,原因是,滚动时,列表里面的view重绘时,用的依旧 ...
最新文章
- 移动端与PHP服务端接口通信流程设计(基础版)
- linux修改ssh端口和禁止root远程登陆设置
- [总结]Asp.net中的页面乱码的问题
- Jmeter_初步认识随笔
- Django2 Web 实战03-文件上传
- 【BZOJ3524】Couriers,第一次的主席树
- 组合日期_为什么我的透视表没法按日期组合?
- Tpcc-mysql 结果解读
- php 抽象类 静态 单体设计模式
- 只要听说过电脑的人都能看懂的网上pdf全书获取项目
- 常用Quartz cron表达式例子
- php后台管理修改密码,重置网站后台管理员密码
- SX1278 Lora网关
- 通过getPixel();和通过bmp.getPixels();方法遍历整张图片的效率比较。
- python编辑svg文件_使用Python创建SVG
- 小米将在武汉建1万人研发中心
- 软件·质量·管理(2)任务排期
- android指定sim卡拨号,使用双SIM卡设备中的指定SIM拨打电话
- 利用wxpython库来制作真心话大冒险小程序
- How OS technology is being deployed in science?
热门文章
- win2003无法进入桌面_电脑桌面怎么建立便签,可以在电脑桌面显示的便签
- win7下hosts文件位置
- cp和scp复制命令
- 安卓学习笔记07:事件处理、窗口跳转与传递数据
- 配置Apache服务器的虚拟主机
- C ++基础 | sizeof函数(endl 和 \ n),定义常量(Define Constants),枚举常量(Enumerated Constants)_2
- 网络计算机热词,2017年的首个网络热词就这样被刷屏了!
- bzoj4417 [Shoi2013]超级跳马 矩乘
- 2017.9.30 物流运输 思考记录
- Intel 64/x86_64/IA-32/x86处理器 - 通用指令(7) - 标志寄存器/标志控制指令 段寄存器指令