Android ListView、BaseAdapter、getViewTypeCount()-如何强制适配器再次检查getViewTypeCount()?

Android ListView、BaseAdapter、getViewTypeCount()-如何强制适配器再次检查getViewTypeCount()?,android,listview,android-listview,adapter,baseadapter,Android,Listview,Android Listview,Adapter,Baseadapter,我正在使用自己的BaseAdapter(standingsListAdapter)用于列表视图(standingsLV)。 设置适配器时: standingsLV.setAdapter(standingsListAdapter); 调用了getViewTypeCount()。 但稍后,当我在适配器中设置新数据时: standingsListAdapter.setData(data); 其中setData(data)设置新数据调用后notifyDataSetChanged(): 不再调用方法g

我正在使用自己的
BaseAdapter(standingsListAdapter)
用于
列表视图(standingsLV)
。 设置适配器时:

standingsLV.setAdapter(standingsListAdapter);
调用了
getViewTypeCount()
。 但稍后,当我在适配器中设置新数据时:

standingsListAdapter.setData(data);
其中
setData(data)
设置新数据调用后
notifyDataSetChanged()

不再调用方法getViewTypeCount()。为什么? 如何强制适配器再次检查getViewTypeCount()?


为什么我需要这个

  • 我在列表的每一行显示表格。表具有不同的长度(行数)
  • 我想在适配器中设置新数据,以便表的长度可以更改
这就是为什么每次新数据到达列表适配器时,都应该重新计算我的视图类型数。

我会尝试:

standingsListAdapter.notifyDataSetChanged();

我认为这是不可能的

Get
getViewTypeCount()
实现是适配器定义的一部分;它定义了无论适配器在任何给定时刻的实际数据是什么,它可以保存的所有可能的类型的数据

框架调用
getViewTypeCount
,以正确地回收列表项视图,这些视图在适配器持有的不同类型的数据之间可能非常不同。更改适配器中的数据时,视图仍会根据
getViewTypeCount
的现有定义/实现进行循环


如果希望再次调用
getViewTypeCount
,请创建一个全新的适配器,并将此新适配器设置为listview的适配器

我不确定这是否可行,但您可以尝试使用相同的适配器再次调用setAdapter。
setAdapter
无论如何都将调用
notifyDataSetChange()
,还将做一些额外的工作。。。我建议你只使用那种方法,就像@pietmau说的那样。你做到了,伙计。(剑桥街头)最简单的解决方案总是最好的:)谢谢亚米和波士顿街头。我还检查了源代码,并且在ListView类的setAdapter(ListAdapter adapter)方法中只调用了一次getViewTypeCount()。因此,再次设置适配器是唯一的解决方案。请注意,再次设置适配器将导致ListView丢失其当前滚动位置等。这也不是很有效。如果您知道在任何给定的时间适配器数据中可以预期哪些类型的项,则应该对getViewTypeCount进行编码,使其预期可以获得的所有类型的数据。如果您再次阅读我的代码,您将看到我已经为适配器调用notifyDataSetChanged。并且它不调用getViewTypeCount()。
standingsListAdapter.notifyDataSetChanged();