saveInstanceState при восстановлении фрагмента из заднего стека

Могу ли я использоватьsavedInstanceState() сохранить состояние при удалении фрагмента, а затем восстановить состояние при извлечении фрагмента из заднего стека? Когда я восстанавливаю фрагмент из заднего стека, комплект saveInstanceState всегда равен нулю.

Прямо сейчас поток приложения: фрагмент создан - & gt; фрагмент удален (добавлен в задний стек) - & gt; Фрагмент восстановлен из заднего стека (комплект saveInstanceState равен нулю)

Вот соответствующий код:

public void onActivityCreated(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle bundle = getArguments();
    Long playlistId = bundle.getLong(Constants.PLAYLIST_ID);
    int playlistItemId = bundle.getInt(Constants.PLAYLISTITEM_ID);

    if (savedInstanceState == null) {
       selectedVideoNumber = playlistItemId;
    } else {
       selectedVideoNumber = savedInstanceState.getInt("SELECTED_VIDEO");
    }
}

public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(Constants.SELECTED_VIDEO, selectedVideoNumber);
    }

Я думаю, проблема в том, чтоonSavedInstanceState() никогда не вызывается при удалении и добавлении в задний стек. Если я не могу использовать onsavedInstanceState (), есть ли другой способ исправить это?

Ответы на вопрос(4)

Id или жеTag связано с этим для того, чтобыFragmentManager следить за этим.

Есть как минимум 3 способа сделать это:

In xml layout declare an Id for your fragment:

android:[email protected]+id/<Id>

If your fragments container View has an Id, use FragmentTransaction:

FragmentTransaction  add (int containerViewId, Fragment fragment)

If your fragment is not associated with any View (e.g. headless fragment), give it a Tag:

FragmentTransaction  add (Fragment fragment, String tag)

Также посмотрите этот ТАК ответ.

я ударил это тоже, но в моем случае onSaveInstanceState был вызван должным образом, и я нажал на мои данные о состоянии, когда новый фрагмент деятельности был поднят на смартфоне. Как и у вас, onActivityCreated был вызван w / saveInstanceState всегда null. ИМХО, я думаю, что это ошибка.

Я обошел его, создав статическое состояние MyApplication и поместив туда данные для эквивалента «глобальных переменных» ...

которое я возвращаю в onCreateView, как глобальную переменную, а затем, когда я возвращаюсь, я просто проверяю это:

if(mBaseView != null) {
        // Remove the view from the parent
        ((ViewGroup)mBaseView.getParent()).removeView(mBaseView);
        // Return it
        return mBaseView;
    }
 13 мая 2014 г., 21:12
Я на самом деле не уверен, так как я не проводил никаких прямых тестов. Тем не менее, мое мышление идет так. Когда вы инициализируете все элементы в макете, это стандартно для установки большинства этих элементов в качестве глобальных переменных, поэтому, если в приведенном выше примере я не смогу перезапустить базовый вид из-за ссылки, Android не сможет перезапустить любой из этих видов либо, что приводит к той же проблеме с памятью.
 31 июл. 2014 г., 17:44
Это решение спасло мне жизнь.
 04 мар. 2014 г., 12:37
Большое спасибо :) Это решило мою проблему
 17 июл. 2014 г., 23:37
Это не сработает, если вам нужно раздувать разные взгляды для разных ориентаций.
 13 мая 2014 г., 17:56
не уверен, что это хорошая идея. Не противоречит ли это цели уничтожения представления, чтобы освободить память, если вы сохраните ссылку на него?

Ваш ответ на вопрос