我的事件管理应用程序在列表视图中有两种类型的视图:一个用于不太重要的事件的简单文本视图和一个用FrameLayout
创建的复杂视图。
在适配器的onCreateView()
中,我会根据事件的性质返回这些视图。
if(convertView == null){
if(important)
// inflate the complex view
else
// inflate the simpler view
}
当convertView
为空时,这一切都很好。由于Android中的视图回收,可能会发生返回给我的convertView
从更简单的视图中回收,现在我必须显示更大的视图。一个愚蠢的解决方案是不断膨胀新的观点。但是,这会扼杀性能。
另一种方法是在两个(TextView
)中使用预定义值隐藏visibility=gone
,并根据其中的值,我可以膨胀视图。对我来说,这似乎是一个黑客而不是一个真正的解决方案。
处理这种情况的正确方法是什么?
答案 0 :(得分:6)
由于Android中的视图回收,可能会发生返回给我的convertView从更简单的视图中回收,现在我必须显示更大的视图。
如果您覆盖适配器中的getViewTypeCount()
和getItemViewType()
,则不会。
在你的情况下:
getViewTypeCount()
将返回2
getItemViewType()
将返回0或1,其中对于作为一种类型的行的位置返回0,对于返回其他类型的行的位置返回1
然后,如果convertView
不是null
,则可以保证它是正确类型的行。