2012-01-26 14 views
9
  1. L'attività 1 è visibile. Premere un pulsante e l'attività 2 si apre.
  2. Activity 2 aggiunge frammento A a se stesso (e pila avanti) e visualizza bene
  3. Premendo un pulsante all'interno delle transizioni frammento all'altro frammento, B
  4. Premere Indietro. Non accade nulla. Eh? La stampa posteriore è apparentemente assorbita e non agita, il display rimane lo stesso.
  5. Premere Indietro una seconda volta, ritorna all'attività 1, come previsto.

Perché il mio frammento non viene mostrato nel passaggio 4? Ho aggiunto il frammento allo stack posteriore, quindi perché (quando il pulsante Indietro sembra consapevole della sua esistenza) non mostra il frammento?Perché Fragment.addToBackStack() causa il pulsante Indietro per non fare nulla?

Ecco il codice che sto utilizzando in Attività 2 per aprire Frammento A.

protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
    setContentView(R.layout.act_profile_edit); 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    transaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right); 
    transaction.addToBackStack(null); 
    transaction.add(android.R.id.content, new MyFragment()); 
    transaction.commit(); 
} 

Ed ecco il codice per aprire frammento B

FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    transaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right); 
    transaction.add(android.R.id.content, new MyOtherFragment()); 
    transaction.commit(); 

risposta

10

Hai provato transaction.replace(...) invece di transaction.add(...)? Questo dovrebbe funzionare Sto indovinando perché se si sta solo l'aggiunta di un frammento rispetto ad un altro, non vede transazione come voler tornare indietro Frammento A.

EDIT La risposta reale per la domanda è al di sotto nei commenti : addToBackStack() dovrebbe essere utilizzato sul frammento che è che sostituisce, non quello che viene sostituito.

+0

Questo non aiuta. Se uso inizialmente la sostituzione (invece di aggiungere) non c'è nessun frammento da sostituire, quindi mi aspetto che si comporti allo stesso modo. Se dovessi usare replace per mostrare il frammento B, sovrascriverebbe quello che voglio che la gente usi Back per tornare, quindi non sarebbe di aiuto. –

+0

ok, quindi questi due frammenti appartengono a frame diversi? –

+0

e qual è il tuo codice per posizionare il frammento B? –

Problemi correlati