Как восстановить ранее отображаемый фрагмент?

Я использую пакет совместимости v4 в своем проекте, и у меня возникла проблема с сохранением фрагмента после он удален из поля зрения. У меня есть Activity , отображающее 2 фрагмента ... фрейм меню слева, панель содержимого справа. В рамке меню есть 3 различных меню (фрагменты), которые могут отображаться.

Вот как я заменяю фрагмент меню:

public void showMenuFragment( Fragment fragment, String tag ) {

        showFragment( R.id.menu_frame, fragment, tag, false);
        setLastMenuPushed( tag );
    }

protected void showFragment( int resId, Fragment fragment, String tag, boolean addToBackStack ) {

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();

        if ( fragmentManager.findFragmentByTag( tag ) != null && fragment.isAdded() ) {
            transaction.remove( fragment );
        }

        transaction.replace( resId, fragment, tag ).setTransition( FragmentTransaction.TRANSIT_FRAGMENT_OPEN ).setBreadCrumbShortTitle( tag );

        if ( addToBackStack ) {
            transaction.addToBackStack( tag );
        }

        transaction.commit();
    }

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

Когда я вызываю showMenuFragment (...) , я пытаюсь передать фрагмент , используя FragmentManager.findFragmentByTag (String tag) , но всегда ] null , поэтому мне приходится создавать новый Фрагмент каждый раз, когда я хочу показать другое меню.

У меня вопрос: как сохранить эти Fragment после того, как они будут заменены другими меню? Я хочу избежать сохранения вручную ссылок на фрагменты , потому что при повороте устройства экземпляр моего класса Activity уничтожается, и я потеряю эти ссылки.

РЕДАКТИРОВАТЬ: Чтобы выразиться проще, я хочу, чтобы FragmentManager отслеживал предыдущие Fragment s, не добавляя их в задний стек. Я не хочу нажимать кнопку «Назад» и видеть предыдущее показанное меню.

10
задан Jason Robinson 8 December 2011 в 18:25
поделиться