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

Lit*_*ild 1 android android-listview

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

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

if(convertView == null){
  if(important)
   // inflate the complex view
  else
   // inflate the simpler view
}  
Run Code Online (Sandbox Code Playgroud)

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

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

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

Com*_*are 6

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

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

在你的情况下:

  • getViewTypeCount() 会回来2

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

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

  • @Little Child你会在getItemViewType()中做一些事情,比如if(myList.get(position).isImportant())返回1; 否则返回0; (3认同)