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

时间:2013-02-26 20:52:58

标签: android listview android-listview adapter baseadapter

我使用自己的BaseAdapter (standingsListAdapter)作为ListView (standingsLV)。 当我设置适配器时:

standingsLV.setAdapter(standingsListAdapter);
调用

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

standingsListAdapter.setData(data);

设置新数据后setData(data) notifyDataSetChanged()

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

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


为什么我需要这个?

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

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

2 个答案:

答案 0 :(得分:6)

我认为这是不可能的。

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

框架调用

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

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

答案 1 :(得分:1)

我会尝试:

standingsListAdapter.notifyDataSetChanged();