项目中,不论是ListView,还是GridView,自己定义的Adapter,在getView的时候,发现position总是0,从而导致只有第一行的view可以渲染出来。
经测试和查找,发现是android渲染和调用方式导致的。
ListView或者GirdView等都类似,如果高度设置不够,android在渲染的时候会去试探和探测高度,如果高度不够,则会停止渲染后面的position。
此时会有不少奇怪的调用出现。
- 比如后面还会调用getView方法,但每次positon的值都是0
- 本来getCount是5,但嗲用了4次getView
- 本来getCount是5,但抵用了6次getView
解决方法:
- 如果麽有view的嵌套,那么顶层的View是可以设置合适的高度的
- 如果有View嵌套,那么嵌套层的view的高度是动态的,很难确定的。此时直接设置wrap_content不好处理,只好在运行时,设置View的高度
- 其他方法,待补充吧
期待完美的解决方案,简化代码~~
参考一个猜测:
原因在于GridView的item的layout中android:layout_height定义为wrap_content , 绘制item高度时系统并不知道item应该绘制多高,它会先取一条来试探以确定item绘制的具体高度,这样就导致多调用了一次getView方法。在滑动、长按等GridView需要重绘的情况下,getView的调用次数可能会不止多一次。
参考:
http://www.androidlearner.net/multiple-times-getview.html
http://www.eoeandroid.com/thread-280139-1-1.html
-
-
-
*
-
-
-
相关推荐
在Android开发中,Adapter是一个至关重要的组件,它作为数据与视图之间沟通的桥梁,使得数据能够被适配并展示在各种ViewGroup中,如ListView、GridView或Spinner等。Adapter的使用极大地简化了数据绑定的过程,让...
然而,有时开发者会遇到`getView()`被多次调用的情况,这可能会导致性能问题或者预期效果无法实现。下面我们将深入探讨`getView()`的调用机制、多调用周期的原因以及如何优化。 1. **`getView()`的调用机制** `...
在这个"android gridview adapter 实例"中,我们将深入探讨如何使用Adapter来填充GridView,并实现每个GridView的item(单元格)显示不同的数据。 首先,理解Adapter在Android中的作用至关重要。Adapter是连接数据...
在Android开发中,自定义接口并将其应用于Activity与Adapter之间的通信是常见的做法,尤其是在处理点击事件和解决滑动错位问题时。这篇文章将深入探讨如何通过这个方法来优化用户界面的交互体验。 首先,让我们理解...
在Android开发中,Adapter是一个非常重要的组件,它起到了数据源与UI展示之间的桥梁作用。本文将深入探讨Android的Adapter机制,以及如何使用各种Adapter来加载数据。 首先,我们需要理解Adapter的基本概念。...
今天在写一个GridView的BaseAdapter时发现,Adapter的getview方法在position为0的时候会连续调用好几次。 我们知道谷歌时是做过优化的,让view有个缓存,我怀疑是因为做缓存的原因才让position连续调用 log如图 可见...
你需要实现其中的几个关键方法,如`getCount()`(返回数据源大小),`getItem(int position)`(获取指定位置的项),`getView(int position, View convertView, ViewGroup parent)`(为ListView创建或复用视图)。...
ListView的使用可以极大地提升用户体验,因为它可以根据需要加载数据,而不是一次性加载所有内容,从而节省资源。本篇文章将深入探讨ListView的基本用法,数据源的添加,以及优化性能的ViewHolder机制。 首先,...
在深入探讨"ex07_list.rar_android_ex07_list"这个压缩包中的内容之前,让我们先来理解一下ListView的基本概念及其核心机制。 ListView是Android SDK提供的一种视图容器,用于显示一行接一行的数据。它通过适配器...
当convertView不为空时,直接从ViewHolder中获取View,避免了多次`findViewById()`操作。例如: ```java static class ViewHolder { TextView text; ImageView icon; } public View getView(int position, ...
6. **设置Adapter**:最后,将创建好的Adapter实例设置到ListView上,通过调用ListView的`setAdapter(Adapter adapter)`方法完成绑定。 在提供的"ListViewTeacheing"文件中,可能包含了一个示例项目的源代码,包括...
**Android中的Adapter是Android开发中不可或缺的一个组件,特别是在处理数据展示时,如ListView、GridView等。Adapter作为数据源和UI组件之间的桥梁,使得数据能够被适配并显示在列表视图上。** ### 1. Adapter简介...
`getView()`是Adapter类的一个关键方法,它负责为ListView创建或复用视图(View)对象。当ListView滚动时,为了节省内存,只有当前可视范围内的View会被创建或复用,因此`getView()`会被频繁调用。如果在这个方法中...
2. 性能优化:由于`getView()`会被多次调用,为了提高性能,通常会在该方法中检查`convertView`是否为空,如果不为空则复用它,避免频繁地创建新视图。 3. 事件监听:你可能还需要为Spinner添加一个`...
在这个特定的示例中,我们探讨的是如何在不调用Adapter的`notifyDataSetChanged()`方法的情况下,直接修改ListView列表项中某个具体控件(如TextView)的值。这种方式在某些场景下可能会提高性能,因为`...
本文将深入探讨如何使用自定义Adapter来创建一个功能丰富的Android ListView好友列表。 首先,我们需要理解ListView的工作原理。ListView依赖于Adapter来提供数据和视图之间的桥梁。Adapter是连接数据源(如...
在Android开发中,Adapter是一个非常重要的组件,尤其在处理数据展示时,如ListView、GridView、RecyclerView等。"android adapter demo"这个项目显然旨在演示如何在Android应用中有效地使用Adapter来实现列表视图与...
在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据的列表,用户可以通过滚动查看更多的条目。这个教程将详细介绍Android ListView的基本用法。 ### 1. 添加ListView到布局 首先,在XML布局文件...
自定义Adapter时,确保正确实现了getItemCount()、getViewTypeCount()和getView(int position, View convertView, ViewGroup parent)方法。 3. **点击事件**:对于ListView中的项点击事件,可以使用...
在Android开发中,Adapter是一个非常重要的组件,它用于在数据集和UI组件之间建立桥梁,尤其是在处理列表或者网格视图时。"可重用的自定义adapter"是Android开发中的一个核心概念,允许开发者根据需求定制ListView、...