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

App*_*evo 6 android listview adapter android-listview baseadapter

我正在使用自己BaseAdapter (standingsListAdapter)ListView (standingsLV).当我设置适配器时:

standingsLV.setAdapter(standingsListAdapter);
Run Code Online (Sandbox Code Playgroud)

getViewTypeCount()叫做.但是后来,当我在适配器中设置新数据时:

standingsListAdapter.setData(data);
Run Code Online (Sandbox Code Playgroud)

setData(data)设置新数据调用之后notifyDataSetChanged():

public void setData(StandingsModelWrapper data) {
    groupsData.clear();
    if (data != null) {
        groupsData.addAll(data.getModel());
    }
    notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)

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


我为什么需要这个?

  • 我在列表的每一行显示表格.表有不同的长度(行数).
  • 我想在适配器中设置新数据,这样可以改变表的长度

这就是为什么每次新数据到达列表适配器时都应该重新计算我的视图类型的数量.

Str*_*ton 6

我不认为这是可能的.

获取getViewTypeCount()实现是适配器定义的一部分; 无论适配器的实际数据在任何给定时刻,它都可以定义它可以容纳的所有可能的数据类型.

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

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