Изменение вида элементов в адаптере, связанных с ListView, во время выполнения приложения - PullRequest
2 голосов
/ 25 августа 2011

Я пытаюсь дать пользователям моего приложения возможность изменить способ отображения результатов.

Я создал отдельный элемент макета для каждого представления и расширен от BaseAdapter, например, так:

public View getView(int index, View recycledCompatibleView, ViewGroup parent) 
{
    // Just in case the view can be reused
    View toReturn = recycledCompatibleView;
    if(toReturn == null)
    {           
        LayoutInflater inflator = LayoutInflater.from(parent.getContext());
        toReturn = inflator.inflate(layoutId, null);
    }
    ...
}

public void setResultsListStyle(int layoutId)
{
    this.layoutId = layoutId;
}

Вызов notifyDataSetChanged() (можно наблюдать посредством отладки) обновляет представление, потому чтоновое представление раздувается и возвращается из метода getView().

Однако представление на экране не меняется ...

Есть ли что-то, что я пропускаю?

1 Ответ

2 голосов
/ 25 августа 2011

Проблема здесь в том, что ListView может кэшировать уже накачанные View s, которые имеют старый «формат».Нужно как-то сбросить этот вид "кеш".Для этого вы можете использовать следующий трюк:

mListView.setAdapter(mListView.getAdapter());

Вместо вызова notifyDataSetChanged().

...