ListView, BaseAdapter, getViewTypeCount () – Как заставить адаптер снова проверить getViewTypeCount ()?

Я использую свой собственный 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 ()?


Зачем мне это нужно?

  • Я показываю таблицы в каждой строке списка. Таблицы имеют разную длину (количество строк).
  • Я хочу установить новые данные в адаптере, так что длина таблиц может измениться

Вот почему число моих типов просмотров должно быть пересчитано каждый раз, когда новые данные поступают в адаптер списка.

Я не думаю, что это возможно.

Получить реализацию getViewTypeCount() является частью определения вашего адаптера; Он определяет, вне зависимости от фактических данных адаптера в любой момент времени, всех возможных типов данных, которые он может удерживать.

getViewTypeCount вызывается каркасом, чтобы правильно перерабатывать представления элементов списка, которые могут быть очень разными между различными типами данных, хранящихся в адаптере. Когда вы изменяете данные в адаптере, представления все еще перерабатываются в соответствии с существующим определением / реализацией getViewTypeCount .

Если вы хотите, чтобы getViewTypeCount был вызван снова, создайте новый адаптер и установите этот новый в качестве адаптера listview.

Я бы попробовал:

 standingsListAdapter.notifyDataSetChanged();