- 浏览: 33008 次
文章分类
最新评论
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 674<?xml version="1.0" ... -
Eclipse Memory Analyzer 分析内存溢出
2016-10-19 11:37 0一 安装篇 1. eclipse 自 ... -
MSBuild命令行编译Xamarin 项目
2016-04-19 14:42 1221Xamarin 平台: C# language – 使用C ... -
微信聊天左滑显示删除实现
2016-04-06 18:04 901参考http://blog.csdn.net/xiaanmin ... -
Handler Thread
2016-03-21 16:42 473介绍 首先我们来看看为什么我们要使用HandlerThread ... -
Android Handler 作用
2016-03-21 15:31 402Android 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 405网上对于 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 41061. 使用relativeLayout 从右侧往左侧加,但是问 ... -
Android系统源码数据库(mmssms.db)(转)
2013-11-18 17:00 923论Android系统源码数据库(mmssms.db)中几个表之 ... -
Android SMS 数据库
2013-11-18 14:57 833$ adb shell $ cd data/data $ cd ... -
PC 操作Android手机
2013-11-15 18:10 626https://code.google.com/p/andro ... -
下载Android source 问题
2013-10-17 10:34 646fatal: '../platform/abi/cpp.git ... -
查看Android数据库
2013-03-19 15:26 6281. adb shell; 2. cd data/data 3 ...
相关推荐
总结来说,实现Android的ListView嵌套ListView需要理解ListView的工作机制,创建并管理两个Adapter,以及在布局文件中正确地嵌套ListView。这虽然不是特别高深的技术,但却是Android开发中常见的需求,熟练掌握能...
总结,下拉刷新和上拉加载是Android应用中常见的功能,通过SwipeRefreshLayout和OnScrollListener可以方便地实现。自定义ListView则允许开发者更深入地控制列表的行为和视觉效果,以提供更加个性化的用户体验。在...
android关于listview之列表分组,像Q上一样显示列表项
总结起来,创建一个Android的网格布局ListView主要涉及以下几个步骤:设计网格项布局、创建自定义Adapter、在Activity中设置GridView并加载数据。通过灵活地调整布局和Adapter,你可以实现各种复杂的网格布局效果。...
总结,将RadioButton应用于Android ListView涉及到自定义Adapter、单选逻辑处理和性能优化等多个方面。理解这些知识点对于开发高效、用户友好的Android应用至关重要。通过熟练掌握这些技术,开发者可以更好地实现...
总结一下,要实现“Android listview 逐行显示效果”,你需要: 1. 在XML布局文件中添加ListView。 2. 创建适配器填充ListView的数据。 3. 定义动画XML文件并放置在res/anim目录下。 4. 为ListView设置滚动监听器,...
总结来说,实现Android的分组ListView并支持折叠功能,需要自定义数据结构和Adapter,处理好分组头和子项的视图类型,监听用户点击事件来切换分组状态,最后在Adapter中根据分组状态动态显示或隐藏子项。这个过程...
总结来说,要实现“android listview仿iphone特效”,开发者需要深入了解ListView的工作原理,结合自定义Adapter、动态高度计算、动画效果以及性能优化等技术,参考提供的博客链接或源码,来打造出具有iOS风格的...
总结,"androidListView下拉刷新Demo"是一个典型的Android开发实践,涉及到Android UI组件的交互、事件监听、数据加载以及第三方库的使用。通过这样的示例,开发者可以学习如何增强ListView的功能,提供更优的用户...
总结来说,实现Android ListView的拖动删除功能需要对触摸事件的处理、拖动操作的管理以及Adapter的数据操作有深入理解。通过结合自定义ListView、适配器和触摸事件监听,我们可以创建出交互性强且用户友好的界面。...
在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据集合,并且支持滚动操作。本教程通过一个名为"ListApp"的示例项目,详细介绍了如何在Android中使用ListView来构建用户界面并实现基本的功能。 ...
总结来说,这个"Android实现ListView的增删改查Demo"涵盖了以下几个关键知识点: 1. 数据模型类的设计(如`Word`) 2. SQLite数据库的使用(`SQLiteOpenHelper`子类) 3. 自定义适配器(如`WordAdapter`) 4. ...
总结来说,“android listview demo 下拉加载更多”是一个展示如何在ListView中实现下拉刷新和上拉加载更多功能的实例。开发者可以通过研究这个demo,学习如何结合使用Android的内置组件和第三方库来提高列表的交互...
总结,Android中的ListView下拉刷新和分页加载是提高用户体验的关键特性。通过SwipeRefreshLayout实现下拉刷新,结合OnScrollListener实现分页加载,可以让用户更加流畅地查看和交互数据。在实际开发中,还需要注意...
总结来说,"android listview mvp"这个主题涉及到在Android开发中如何利用MVP架构模式来组织代码,同时结合Adapter和ViewHolder对ListView进行优化,以提供流畅的用户体验。通过对这些知识点的深入理解和实践,...
总结来说,"android Listview显示多任务下载效果"这一主题涵盖了Android UI设计、多线程编程、数据适配器机制、用户交互以及网络下载等关键知识点。通过实现这样的功能,开发者不仅可以提升用户体验,也能深入理解...
在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。在某些应用场景中,我们可能需要实现ListView的单选功能,即用户只能选择一个条目,每次点击其他条目时,之前的选择会被取消。本篇将详细介绍...
总结,Android中的ListView是一个功能强大且灵活的组件,能够处理各种类型的数据展示和交互。通过理解并熟练掌握上述知识,开发者可以创建出丰富多样的列表界面,提升用户在应用中的交互体验。在实际开发中,不断...
总结,Android ListView的动态查询和更新涉及到数据源管理、适配器原理、异步加载、性能优化等多个方面。开发者需要熟练掌握这些技术,以构建流畅、响应式的用户界面。通过SearchListView这个例子,我们可以学习如何...
总结起来,实现ListView选中第一行或任意一行并能取消选中的关键步骤包括: 1. 实现`OnItemClickListener`监听器。 2. 在点击事件中改变选中项的背景色,并记录选中位置。 3. 在新的项被点击时,取消之前选中的项。 ...