2010-04-27 15 views

risposta

90

Chiamare finish() dall'attività che si desidera terminare dovrebbe occuparsi di questo.

Modifica molti anni più tardi: Questo funziona ancora, ma è un approccio un po 'pesante. Quando ho pubblicato questo messaggio originariamente, Fragments non esisteva e (come hanno sottolineato diversi commentatori) questo non funziona nello stesso modo quando ci sono Fragments coinvolti. Ci sono approcci meglio ora se si sta utilizzando Fragments.

+0

questo è rigth, così facile, mi dispiace .... – david

+7

Non c'è bisogno di chiedere scusa, solo felice di aiutare! –

+17

Questo non simula il pulsante Indietro. Se si stanno solo utilizzando le attività, è ok ma se si stanno usando frammenti in un'attività, questo chiuderà tutti i frammenti con l'attività insieme. – tasomaniac

34

quando si utilizza frammenti:

getFragmentManager().popBackStack(); 

o

getSupportFragmentManager().popBackStack(); 

se si utilizza android.support.v4.app pacchetto

1

Questo è per una situazione in cui lo stesso frammento può talvolta essere l'unico frammento in un'attività e talvolta parte di un'attività multi-frammento, ad esempio su un tablet in cui due i frammenti sono visibili allo stesso tempo.

/** 
* Method that can be used by a fragment that has been started by MainFragment to terminate 
* itself. There is some controversy as to whether a fragment should remove itself from the back 
* stack, or if that is a violation of the Android design specs for fragments. See here: 
* http://stackoverflow.com/questions/5901298/how-to-get-a-fragment-to-remove-itself-i-e-its-equivalent-of-finish 
*/ 
public static void fragmentImplementCancel(Fragment fragment) { 

    FragmentActivity fragmentActivity = fragment.getActivity(); 
    FragmentManager fragmentManager = fragmentActivity.getSupportFragmentManager(); 

    if (fragmentManager.getBackStackEntryCount() == 1) { 
     fragmentManager.popBackStack(); 
    } 
    else { 
     fragmentActivity.finish(); 
    } 
} 

Questo codice può essere chiamato per implementare un pulsante Annulla, ad esempio.

if (theButton.getId() == R.id.btnStatusCancel) { 
     StaticMethods.fragmentImplementCancel(this); 
    } 
50

Proprio per la registrazione: Il metodo descritto non fa lo stesso del pulsante indietro fa, in alcuni casi, ma è possibile chiamare

this.onBackPressed(); 

o

getActivity().onBackPressed(); 

se sono in un frammento per raggiungere esattamente lo stesso comportamento.

+3

Da quello che posso dire, questa è la migliore risposta. Grazie. –

0

È possibile falsificare una chiamata tasto sul pulsante indietro:

@Override 
public void onBackPressed() { 
    onNavigateUp(); 
} 
Problemi correlati