Как правильно сохранить и восстановить состояние экземпляра фрагментов в стеке назад? - PullRequest
0 голосов
/ 02 июня 2019

Я обнаружил много случаев аналогичного вопроса, но, к сожалению, ни один ответ не отвечает моим требованиям.

У меня есть много фрагментов в деятельности и объект, который я передаю от одного фрагмента к другому. Этот объект будет изменяться каждым фрагментом, который я хочу, чтобы, когда я возвращаюсь в backstack, я восстанавливал предыдущий экземпляр фрагмента и предыдущую версию объекта, который я пробовал с onSaveInstanceState, но, очевидно, когда резервное копирование во фрагменте onSaveInstanceState не вызывается

  override fun onSaveInstanceState(outState: Bundle) {
    outState?.run {
        putParcelable("PRODUCT",Product)
    }

    super.onSaveInstanceState(outState)
}

1 Ответ

0 голосов
/ 02 июня 2019

Когда вы изменяете фрагмент, вам нужно создать новый и .replace старый.

    public BlankFragment modifyFragment() {
        int newVar = myVar; // your modified variable. Not the best example

        // you need to create a new instance of the fragment
        // everytime you modify your fragment so that you can replace the
        // one you want to go back to later
        BlankFragment blankFragment = BlankFragment.newInstance(++newVar);

        getActivity().getSupportFragmentManager().beginTransaction()
                .replace(R.id.a_main_fl_root, blankFragment) // When you click back press. It will restore the replaced fragment.
                .addToBackStack(null) 
                .commit();

        return blankFragment; // the new fragment is returned so you can replace it again and again.
        // what I didn't include is how to get the instance of the replaced fragment when you click back press.
    }

Нет необходимости в saveInstanceState, потому что оно используется только тогда, когда действие уничтожается и воссоздается.

...