- 浏览: 31796 次
文章分类
最新评论
Listview 问题汇总:
1. item 中的check view 选中混乱
ListView 缓存机制导致的。
解决方案可以是:
在adapter里的getView方法里先调用holder.cbIamge.setOnCheckedChangeListener方法,
再调用holder.cbIamge.setChecked方法即可解决问题。(holder.cbIamge)是一个CheckBox对象。
若还要实时记录CheckBox选中了的数量,则上面的解决方案还是不管用,通过在网上的搜索,终于找到了解决方案,在此记录一下,该网址为:http://stackoverflow.com/questions/6100518/checkbox-auto-call-oncheckedchange-when-listview-scroll
该解决方案是:
在adapter中调用holder.cbIamge.setChecked()时先将CheckBox的监听设为空(holder.cbIamge.setOnCheckedChangeListener(null);)
再调用holder.cbIamge.setChecked()方法
最后重新设定CheckBox的监听holder.cbIamge.setOnCheckedChangeListener(new OnCheckedChangeListenerImpl(holder, position));
2. item 内容重复
View 的复用导致的,每次getview调用时都设置其内容
3. 第一条item 的对象记录错误
曾经在项目中遇到这样的需求,选中GridView 中某一项,标记选中项,我的解决方案是:用个sharepreference或者数据库或者其他记录被选中的id,在getView时判断item的id和记录的id一致时,标记item(可以是设置背景色等),记录被标记的ViewHolder lastHolder, 当下一个item被选中时,将先前的lastHolder复原。
在这样的case下会出现问题,选中第一条,退出应用,重新打开应用,选中第二条,这时,第一条仍旧被选中。
另外一条原理上一样的case: 选中item1, 编辑界面上某个EditText 弹出keyboard, 隐藏keyboard,选中第二条case,这时,第一条仍旧被选中。
先说一下第二条的原因:
Activity 可以配置windowSoftInputMode 的属性,若不配置当keyboard弹出,会重新绘制界面,ListView 当height设置为wrapcontent 或者 matchparent,listView的第一条数据会绘制多次,所以记录的 lastHolder 与我们看到的第一条item未必是匹配的,这是操作lastHolder 没有任何变化。这样前面的case也可以解释通,第一条item被绘制多次,
lastHolder记录的对象并不是界面上看到的对象。
解决方案:
针对keyboard弹出导致的第一条item绘制多次可以将 windowSoftInputMode 设置成 adjustNothing 让keyboard 弹出时不重新绘制界面,但是解决不了第一个场景,可以重写GridView或者Listview 在onMeasure方法时记录flag,如果已经绘制显示出来,则lastHolder不在重新赋值
最后附件附上一个Android 开发 UI 的开发建议文档
1. item 中的check view 选中混乱
ListView 缓存机制导致的。
解决方案可以是:
在adapter里的getView方法里先调用holder.cbIamge.setOnCheckedChangeListener方法,
再调用holder.cbIamge.setChecked方法即可解决问题。(holder.cbIamge)是一个CheckBox对象。
若还要实时记录CheckBox选中了的数量,则上面的解决方案还是不管用,通过在网上的搜索,终于找到了解决方案,在此记录一下,该网址为:http://stackoverflow.com/questions/6100518/checkbox-auto-call-oncheckedchange-when-listview-scroll
该解决方案是:
在adapter中调用holder.cbIamge.setChecked()时先将CheckBox的监听设为空(holder.cbIamge.setOnCheckedChangeListener(null);)
再调用holder.cbIamge.setChecked()方法
最后重新设定CheckBox的监听holder.cbIamge.setOnCheckedChangeListener(new OnCheckedChangeListenerImpl(holder, position));
2. item 内容重复
View 的复用导致的,每次getview调用时都设置其内容
3. 第一条item 的对象记录错误
曾经在项目中遇到这样的需求,选中GridView 中某一项,标记选中项,我的解决方案是:用个sharepreference或者数据库或者其他记录被选中的id,在getView时判断item的id和记录的id一致时,标记item(可以是设置背景色等),记录被标记的ViewHolder lastHolder, 当下一个item被选中时,将先前的lastHolder复原。
在这样的case下会出现问题,选中第一条,退出应用,重新打开应用,选中第二条,这时,第一条仍旧被选中。
另外一条原理上一样的case: 选中item1, 编辑界面上某个EditText 弹出keyboard, 隐藏keyboard,选中第二条case,这时,第一条仍旧被选中。
先说一下第二条的原因:
Activity 可以配置windowSoftInputMode 的属性,若不配置当keyboard弹出,会重新绘制界面,ListView 当height设置为wrapcontent 或者 matchparent,listView的第一条数据会绘制多次,所以记录的 lastHolder 与我们看到的第一条item未必是匹配的,这是操作lastHolder 没有任何变化。这样前面的case也可以解释通,第一条item被绘制多次,
lastHolder记录的对象并不是界面上看到的对象。
解决方案:
针对keyboard弹出导致的第一条item绘制多次可以将 windowSoftInputMode 设置成 adjustNothing 让keyboard 弹出时不重新绘制界面,但是解决不了第一个场景,可以重写GridView或者Listview 在onMeasure方法时记录flag,如果已经绘制显示出来,则lastHolder不在重新赋值
最后附件附上一个Android 开发 UI 的开发建议文档
- Th_0230_TurboChargeYourUI-HowtomakeyourAndroidUIfastandefficient.pdf (2.2 MB)
- 下载次数: 0
发表评论
-
android页面布局 中间的listView填充剩余部分
2016-12-05 17:29 639<?xml version="1.0" ... -
Eclipse Memory Analyzer 分析内存溢出
2016-10-19 11:37 0一 安装篇 1. eclipse 自 ... -
MSBuild命令行编译Xamarin 项目
2016-04-19 14:42 1137Xamarin 平台: C# language – 使用C ... -
微信聊天左滑显示删除实现
2016-04-06 18:04 852参考http://blog.csdn.net/xiaanmin ... -
Handler Thread
2016-03-21 16:42 432介绍 首先我们来看看为什么我们要使用HandlerThread ... -
Android Handler 作用
2016-03-21 15:31 369Android handler 作用: 什 ... -
Android UI 线程和子线程通信
2016-03-18 18:24 0从主线程发送消息到子 ... -
数据库升级
2016-03-07 17:09 0转自: http://892848153.iteye.com/ ... -
Intent与Activity启动模式相关的Flag
2015-11-27 16:08 370网上对于 Intent 的 flag 做了很多介绍,都 ... -
android 让一个控件按钮居于底部的几种方法
2015-04-09 15:00 0android 让一个控件按钮居于底部的几种方法 1.采用li ... -
Service 理解
2015-03-11 19:08 01. Service 也是运行在主线程,和Activity级别 ... -
回调 同步 异步
2014-12-16 17:34 0回调 同步 异步 -
JSON
2014-12-16 17:33 0JSON 的使用场景 -
远程service
2014-12-16 17:32 0远程Service使用场景: 1. 远程Service-- ... -
Android 实现两个控件分别靠左侧边缘和右侧边缘,且不重叠
2014-12-11 16:02 40451. 使用relativeLayout 从右侧往左侧加,但是问 ... -
Android系统源码数据库(mmssms.db)(转)
2013-11-18 17:00 881论Android系统源码数据库(mmssms.db)中几个表之 ... -
Android SMS 数据库
2013-11-18 14:57 792$ adb shell $ cd data/data $ cd ... -
PC 操作Android手机
2013-11-15 18:10 556https://code.google.com/p/andro ... -
下载Android source 问题
2013-10-17 10:34 603fatal: '../platform/abi/cpp.git ... -
查看Android数据库
2013-03-19 15:26 5721. adb shell; 2. cd data/data 3 ...
相关推荐
android关于listview之列表分组,像Q上一样显示列表项
Android ListView的下拉刷新,在实际开发中是很常用的,所以这里总结了,ListView下拉刷新的一个Demo。 该Demo的源码来自于github上的一个开源代码,只不过这里是将所需的library导入到项目中,然后将...
Android自定义adapter的listview代码
1.总结了四种实例ListView的Adaprer 2.默认的效果是集成BaseAdapter.当想看别的显示效果,可以去修改androidManifest.xml
详细介绍了ListView比较常用的三种适配器的用法,基于代码一步一步完成,自己学习后的一点总结
ListView总结
Android ListView与ScrollView冲突的解决方法总结 众所周知ListView与ScrollView都具有滚动能力,对于这样的View控件,当ScrollView与ListView相互嵌套会成为一种问题: 问题一:ScrollView与ListView嵌套导致...
Android中的ListView应该算是布局中几种最常用的组件之一了,使用也十分方便,下面将介绍ListView几种比较常见的优化方法: 首先我们给出一个没有任何优化的Listview的Adapter类,我们这里都继承自BaseAdapter,...
只是总结下getView里面优化视图的几种写法,需要的朋友可以参考下
为大家详细介绍了Android ListView常用小技巧,帮助大家更好的开发Android项目,感兴趣的小伙伴们可以参考一下
最近参考一些资料,发现一个万能ListView适配器,代码量少,节省时间,总结一下分享给大家。 首先有一个自定义的Adapter继承于BaseAdapter,下面是自定义的Adapter,精华在getView()方法中 package ...
主要介绍了Android编程使用ListView实现数据列表显示的方法,实例分析了Android中ListView控件的使用技巧,需要的朋友可以参考下
把android中重要的listview的用法进行归纳总结
但是在我们的开发过程中,我们可能会碰到这样的问题listview点击不变颜色,总结了一下大概有这几种原因: 1、item的layout设置background颜色值,去掉背景颜色即可 2、listview中listselector属性的效果被覆盖了,...
网上收集和自己总结的一些android使用资料,比较基础的知识,对全面了解一些知识很不错的 android ListView美化.docx androidshape.docx android_textview.设置文本属性.docx android_设置字体样式.docx ...
Android ListView异步加载图片错位、重复、闪烁分析以及解决方案,具体问题分析以及解决方案请看下文。 我们在使用ListView异步加载图片的时候,在快速滑动或者网络不好的情况下,会出现图片错位、重复、闪烁等问题...
近期做项目碰到ScrollView与Listview冲突的情况,查看了网上一些解决listview和scollView的冲突的方法,最终选择了重写onMeasure的方法来解决这个问题。 在此对各种方法做一个个人的总结评价。 主要的方法有四种: ...
android界面效果全汇总: Activity 页面切换的效果(闪屏,淡入淡出,由左向右滑入,实现zoomin和zoomout) android菜单动画(android 翻页) android ListView详解 Android API Demo研究 Animations 镜像倒影特效...