使用不同布局填充Android ListView
的推荐方法似乎是覆盖
getItemViewType(int position)
和getViewTypeCount()
。此处的许多问题和答案都明确了这一点(例如here,here和here)。
但是,在查看具体的代码示例/教程时,我真的不明白为什么覆盖这些方法是正确的方法:
getView(...)
,它会根据给定位置的列表项膨胀正确的布局。主要问题是使用getItemViewType
签名会强制您首先将布局类型编码为int
,然后(在getView(...)
中将此int再次解码为任何布局类型......这增加了额外的复杂性和错误的可能性。
答案 0 :(得分:1)
首先,ListView
现在基本上被RecyclerView
取代。
顺便说一下,原因似乎是根据您在getItemViewType
中返回的ViewType为您完成了膨胀代码。我认为这与所述观点的回收逻辑here有关。框架调用getItemViewType
,使用它来确定它是否可以返回循环视图,或者是否必须调用getView
来对其进行充气。
答案 1 :(得分:0)
你是对的,我使用了几个布局的ListView而没有覆盖getItemViewType()
,只是将条件放在getView()
,
后来我转换到了RecyclerView,然后getItemViewType()
非常有意义,因为返回的类型标记了哪些视图被回收,哪一个没有。
对我来说,RecyclerView要好得多,您是否考虑过切换到RecyclerView?
答案 2 :(得分:0)
即使对于ListView
,如果您希望在适配器中使用多种布局,也需要getItemViewType()
。
您是正确的,getView()
仍然需要修改才能使用正确的视图类型,但正确实现getItemViewType()
可以确保convertView
参数传递给{ {1}}是正确的结构。如果您没有覆盖getView()
,那么您将失去使getItemViewType()
效果良好的视图回收。