我的ListView有两种类型的视图。怎么管理?

时间:2014-07-12 20:59:06

标签: android android-listview

我的事件管理应用程序在列表视图中有两种类型的视图:一个用于不太重要的事件的简单文本视图和一个用FrameLayout创建的复杂视图。

在适配器的onCreateView()中,我会根据事件的性质返回这些视图。

if(convertView == null){
  if(important)
   // inflate the complex view
  else
   // inflate the simpler view
}  

convertView为空时,这一切都很好。由于Android中的视图回收,可能会发生返回给我的convertView从更简单的视图中回收,现在我必须显示更大的视图。一个愚蠢的解决方案是不断膨胀新的观点。但是,这会扼杀性能。

另一种方法是在两个(TextView)中使用预定义值隐藏visibility=gone,并根据其中的值,我可以膨胀视图。对我来说,这似乎是一个黑客而不是一个真正的解决方案。

处理这种情况的正确方法是什么?

1 个答案:

答案 0 :(得分:6)

  

由于Android中的视图回收,可能会发生返回给我的convertView从更简单的视图中回收,现在我必须显示更大的视图。

如果您覆盖适配器中的getViewTypeCount()getItemViewType(),则不会。

在你的情况下:

  • getViewTypeCount()将返回2

  • getItemViewType()将返回0或1,其中对于作为一种类型的行的位置返回0,对于返回其他类型的行的位置返回1

然后,如果convertView不是null,则可以保证它是正确类型的行。