`

Android ListView 问题汇总

 
阅读更多
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 的开发建议文档

分享到:
评论

相关推荐

    android的listview嵌套listview,列表嵌套列表 android studio版本

    总结来说,实现Android的ListView嵌套ListView需要理解ListView的工作机制,创建并管理两个Adapter,以及在布局文件中正确地嵌套ListView。这虽然不是特别高深的技术,但却是Android开发中常见的需求,熟练掌握能...

    Android ListView 下拉刷新、上拉加载

    总结,下拉刷新和上拉加载是Android应用中常见的功能,通过SwipeRefreshLayout和OnScrollListener可以方便地实现。自定义ListView则允许开发者更深入地控制列表的行为和视觉效果,以提供更加个性化的用户体验。在...

    android关于listview之列表分组

    android关于listview之列表分组,像Q上一样显示列表项

    android ListView 网格布局

    总结起来,创建一个Android的网格布局ListView主要涉及以下几个步骤:设计网格项布局、创建自定义Adapter、在Activity中设置GridView并加载数据。通过灵活地调整布局和Adapter,你可以实现各种复杂的网格布局效果。...

    androidlistview里面使用radiobutton

    总结,将RadioButton应用于Android ListView涉及到自定义Adapter、单选逻辑处理和性能优化等多个方面。理解这些知识点对于开发高效、用户友好的Android应用至关重要。通过熟练掌握这些技术,开发者可以更好地实现...

    Android listview 逐行显示效果

    总结一下,要实现“Android listview 逐行显示效果”,你需要: 1. 在XML布局文件中添加ListView。 2. 创建适配器填充ListView的数据。 3. 定义动画XML文件并放置在res/anim目录下。 4. 为ListView设置滚动监听器,...

    Android listview 分组及折叠分组

    总结来说,实现Android的分组ListView并支持折叠功能,需要自定义数据结构和Adapter,处理好分组头和子项的视图类型,监听用户点击事件来切换分组状态,最后在Adapter中根据分组状态动态显示或隐藏子项。这个过程...

    android listview仿iphone特效

    总结来说,要实现“android listview仿iphone特效”,开发者需要深入了解ListView的工作原理,结合自定义Adapter、动态高度计算、动画效果以及性能优化等技术,参考提供的博客链接或源码,来打造出具有iOS风格的...

    androidListView下拉刷新Demo

    总结,"androidListView下拉刷新Demo"是一个典型的Android开发实践,涉及到Android UI组件的交互、事件监听、数据加载以及第三方库的使用。通过这样的示例,开发者可以学习如何增强ListView的功能,提供更优的用户...

    Android ListVIew 拖动Item 删除

    总结来说,实现Android ListView的拖动删除功能需要对触摸事件的处理、拖动操作的管理以及Adapter的数据操作有深入理解。通过结合自定义ListView、适配器和触摸事件监听,我们可以创建出交互性强且用户友好的界面。...

    android Listview demo

    在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据集合,并且支持滚动操作。本教程通过一个名为"ListApp"的示例项目,详细介绍了如何在Android中使用ListView来构建用户界面并实现基本的功能。 ...

    Android实现ListView的增删改查Demo

    总结来说,这个"Android实现ListView的增删改查Demo"涵盖了以下几个关键知识点: 1. 数据模型类的设计(如`Word`) 2. SQLite数据库的使用(`SQLiteOpenHelper`子类) 3. 自定义适配器(如`WordAdapter`) 4. ...

    android listview demo 下拉加载更多

    总结来说,“android listview demo 下拉加载更多”是一个展示如何在ListView中实现下拉刷新和上拉加载更多功能的实例。开发者可以通过研究这个demo,学习如何结合使用Android的内置组件和第三方库来提高列表的交互...

    Android ListView下拉刷新和分页

    总结,Android中的ListView下拉刷新和分页加载是提高用户体验的关键特性。通过SwipeRefreshLayout实现下拉刷新,结合OnScrollListener实现分页加载,可以让用户更加流畅地查看和交互数据。在实际开发中,还需要注意...

    android listview mvp

    总结来说,"android listview mvp"这个主题涉及到在Android开发中如何利用MVP架构模式来组织代码,同时结合Adapter和ViewHolder对ListView进行优化,以提供流畅的用户体验。通过对这些知识点的深入理解和实践,...

    android Listview显示多任务下载效果

    总结来说,"android Listview显示多任务下载效果"这一主题涵盖了Android UI设计、多线程编程、数据适配器机制、用户交互以及网络下载等关键知识点。通过实现这样的功能,开发者不仅可以提升用户体验,也能深入理解...

    Android ListView单选

    在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。在某些应用场景中,我们可能需要实现ListView的单选功能,即用户只能选择一个条目,每次点击其他条目时,之前的选择会被取消。本篇将详细介绍...

    android ListView初级到高级详解

    总结,Android中的ListView是一个功能强大且灵活的组件,能够处理各种类型的数据展示和交互。通过理解并熟练掌握上述知识,开发者可以创建出丰富多样的列表界面,提升用户在应用中的交互体验。在实际开发中,不断...

    Android ListView动态查询更新代码

    总结,Android ListView的动态查询和更新涉及到数据源管理、适配器原理、异步加载、性能优化等多个方面。开发者需要熟练掌握这些技术,以构建流畅、响应式的用户界面。通过SearchListView这个例子,我们可以学习如何...

    Android中listView选中第一行,或任意一行,选中后能取消

    总结起来,实现ListView选中第一行或任意一行并能取消选中的关键步骤包括: 1. 实现`OnItemClickListener`监听器。 2. 在点击事件中改变选中项的背景色,并记录选中位置。 3. 在新的项被点击时,取消之前选中的项。 ...

Global site tag (gtag.js) - Google Analytics