Android: элементы ListView в ListFragment перекрывают друг друга - PullRequest
4 голосов
/ 02 ноября 2011

Я решаю странную проблему с ListFragments.У меня есть простая FragmentActivity с одним FrameLayout ведьма является контейнером для моего ListFragment.Я использую свой пользовательский адаптер для данных.Все идет нормально, пока я не поверну устройство, чтобы изменить ориентацию.После этого просмотр списка выводится дважды - один список перекрывает второй.Когда я прокручиваю список, перемещается только один из списков, и он создает артефакты, как показано на рисунке.

screenshot from emulator

Я инициализирую адаптер в onCreateActivity и ничего не делаю вметод onDestroy.Что-нибудь, что я должен сделать в методе onDestroy, чтобы очистить список.Пожалуйста, вы когда-нибудь встречали эту проблему?Я действительно не знаю, что с этим делать.

Спасибо!

1 Ответ

6 голосов
/ 02 ноября 2011

Извините, что я не добавил код, но я действительно не знал, какая часть могла сделать это.Но я наконец выяснил, в чем причина.

В методе родительской активности onCreate я создал фрагмент, вызвав

if(mFragment == null)
{
    mFragment = onCreatePane();

    getSupportFragmentManager()
        .beginTransaction()
        .add(R.id.root_container,mFragment)
        .commit();
}

Я подумал, что теста для null достаточно,но содержимое фрагмента остается в FrameLayout либо после вызова onDestroy в Activity (путем вращения устройства).Это странно, не правда ли?

Я пытался установить этот код на onStop()

if(mFragment != null)
{
    getSupportFragmentManager()
        .beginTransaction()
        .remove(mFragment)
        .commit();
}

, но результат был тот же.Единственное решение, которое я нашел, это заменить метод add() методом replace().Но кто-нибудь знает, почему удаление фрагмента не помогло?И почему содержимое фрагмента остается в FrameLayout после уничтожения Activity?

Еще раз спасибо.

EDIT:

Теперь я знаю, в чем была проблема.Я должен проверить savedStateInstance == null вместо mFragment == null.Если я этого не сделаю, основное действие восстановит старый фрагмент из сохраненного состояния, а также создаст новый фрагмент в моем методе onCreate.

...