2015-05-12 9 views
5

Ho un'applicazione con il cassetto di navigazione. quando avvio l'applicazione, quello che ho sullo schermo principale (schermo A) è "ciao mondo" e poi quando seleziono un oggetto dal cassetto di navigazione, carico un frammento e ottengo "nuovo mondo ciao" e poi di nuovo quando seleziono un elemento dal cassetto di navigazione, carico un frammento e ottengo "Ciao universo". Ma dato che tutto questo avviene tramite 1 singolo frammento, quando premo il pulsante indietro del dispositivo dovrei ottenere il frammento precedente come di seguito:gestire il pulsante indietro in un singolo frammento

"Ciao universo"> premere indietro> "nuovo mondo ciao"> premere indietro> "ciao mondo "

come gestirlo?

NOTA:

mentre si cambia il frammento ho provato

fragmentManager.beginTransaction().replace(R.id.mainContent, fragment).commit(); 

poi ho cambiato a:

fragmentManager.beginTransaction().add(R.id.mainContent, fragment).addToBackStack("tag").commit(); 

ma niente ha funzionato. L'app si chiude premendo il pulsante Indietro. È dovuto allo stesso frammento essere sostituito da un altro contenuto ancora e ancora?

risposta

1

Il secondo approccio che hai provato è corretto. Prova a chiamare popBackStack() su BackPressed() ignorando il metodo onBackPressed().

@Override 
public void onBackPressed() { 
    if (getFragmentManager().getBackStackEntryCount() > 0) { 
     getFragmentManager().popBackStack(); 
    } else if (getFragmentManager().getBackStackEntryCount() == 0) { 
     super.onBackPressed(); 
    } 
} 
+0

lavorato. grande aiuto .. grazie. punti brownie !! :) voto! –

+0

siete i benvenuti :) – dora

0

utilizzare metodi addToBackStack e popBackStack al fine di gestire tasto back per frammenti qui è campione

ft.replace(R.id.simple_fragment, newFragment); 
    ft.addToBackStack("tag"); 
    ft.commit(); 

e sul pulsante Indietro

FragmentManager fm = getSupportFragmentManager(); 
if (fm.getBackStackEntryCount() > 0) { 
    fm.popBackStack(); 
} 
1

Credo che è necessario aggiungere il frammento il backstack chiamando addToBackStack, qualcosa del genere:

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
if (fragmentManager.findFragmentByTag("MainFragment") == null) { 
    fragmentTransaction.add(R.id.content_frame, fragment, "MainFragment"); 
} else { 
    fragmentTransaction.replace(R.id.content_frame, fragment, "MainFragment"); 
    fragmentTransaction.addToBackStack("Fragment" + position); 
} 
fragmentTransaction.commit(); 

e l'override OnBackPressed():

@Override 
public void onBackPressed() { 
    if (getFragmentManager().getBackStackEntryCount() > 0){ 
     getFragmentManager().popBackStack(); 
    } else { 
     super.onBackPressed(); 
    } 
} 
+0

non ha funzionato. Ho lavorato come suggerito e poi ho selezionato l'elemento dal cassetto e di nuovo ho selezionato un altro oggetto dal cassetto. ora quando preme il tasto indietro non succede nulla. poi di nuovo quando premo il tasto, l'app si chiude. :( –

Problemi correlati