fragmento de android onRestoreInstanceState

120

Estou faltando alguma coisa ou Fragmentnão tenho um onRestoreInstanceState()método? Se não, como faço para conseguir algo semelhante?

Shaun
fonte

Respostas:

200

Os fragmentos não têm onRestoreInstanceStatemétodo.

Você pode obter o mesmo resultado em onActivityCreated, que recebe um pacote com o estado da instância salva (ou nulo).

Verifique o código-fonte aqui .

mgv
fonte
90
Esse não é um design consistente, não é?
Ehtesh Choudhury
4
Isso também não se preocupa em retomar o fragmento, não é? tudo bem para alterações de configuração, mas e se você ir para uma atividade de um fragmento e depois voltar para o fragmento?
speedynomads
1
Os fragmentos devem pertencer a uma atividade para começar, portanto, se você salvar no fragmento, ele será salvo na atividade pai. Então, se você deixar esse fragmento (que pertence a uma atividade) e voltar para o fragmento, todos os valores serão restaurados da atividade pai
Shaun
3
onActivityCreated () não é o único método para restaurar o estado do fragmento. Você pode restaurá-lo durante onCreate (), onCreateView () ou onActivityCreated (). developer.android.com/guide/components/fragments.html
shaby
1
@EhteshChoudhury Nada no desenvolvimento de aplicativos Android é "design consistente". Está tudo bagunçado e tudo está "obsoleto".
Karanveer Singh
43

Eu sei que você aceitou a resposta, mas você deve ler a documentação oficial sobre fragmentos , e ela diz (parágrafo "Manipulando o Ciclo de Vida do Fragmento"):

Você pode reter o estado de um fragmento usando um Bundle, caso o processo da atividade seja eliminado e você precise restaurar o estado do fragmento quando a atividade for recriada. Você pode salvar o estado durante o retorno de chamada onSaveInstanceState () do fragmento e restaurá-lo durante onCreate (), onCreateView () ou onActivityCreated ()

Assim, você pode usar o que melhor lhe convier: onCreate(), onCreateView()ouonActivityCreated()

Jimpanzer
fonte
29

No exemplo de ListFragment do guia Fragments, você pode encontrar:

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("curChoice", mCurCheckPosition);
}

Que você pode usar assim:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if (savedInstanceState != null) {
        // Restore last state for checked position.
        mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
    }
}

onActivityCreated() é invocado depois que o fragmento retorna da pilha.

Gaurav Darji
fonte
13

onViewStateRestoredde Fragmenté equivalente a onRestoreInstanceStatede Activity. Mas é chamado depois onActivityCreated(Bundle)e antes onStart().

nhkhanh
fonte