2014-09-13 9 views
7

Sono nuovo nello sviluppo di Andoid e ho creato uno snippet per sostituire programmaticamente i frammenti.Qual è lo scopo di null in addToBackStack (null)?

Ho seguito il guide on android developers.

devo creare un metodo denominato selectFrag e fece fuoco su scatto del tasto:

public void selectFrag(View view) 
{  
    Fragment fr;  

    if(view == findViewById(R.id.showsecond)) { 
     fr = new secondfragment(); 
    } else { 
     fr = new firstfragment(); 
    } 

    FragmentManager fm = getFragmentManager(); 

    FragmentTransaction ft = fm.beginTransaction(); 

    ft.replace(R.id.fragment_place,fr); 

    ft.addToBackStack(null); 

    ft.commit();  
} 

codice funziona perfettamente e capisco tutto, tranne addToBackStack(null).

Ho sperimentato e compreso che questo metodo è per aggiungere il frammento allo stack del pulsante indietro, in modo che se si fa clic sul pulsante Indietro, non si lasci lo schermo e si mostri il lavoro precedente.

Ma, non capisco cosa mostra null qui. Ho cercato sul web ma sapevo solo che si tratta di un TAG e potremmo usare something like this.

Quindi, la mia domanda è molto semplice: Cosa si intende per null qui? o Cosa fa null?

(. Dispiace per il mio pessimo inglese)

+0

@nem so cosa è null in java ma voglio sapere perché null in addToBackStack()? qual è lo scopo di null nel metodo "" questo ""? – xyz

risposta

14

Da documentation, è abbastanza chiaro:

public abstract FragmentTransaction addToBackStack (String name) 

Aggiungi questa transazione allo stack indietro. Ciò significa che la transazione verrà ricordata dopo che è stata commessa, e invertirà la sua operazione quando in seguito sarà saltata fuori dallo stack.

Parametri

name // An optional name for this back stack state, or null. 

Così il vostro parametro è opzionale e rappresenta il nome del frammento.

Se si desidera aggiungere questa transazione allo stack posteriore e non è necessario accedervi successivamente, è possibile inserire null come nome.

In questo contesto, null in inglese significa "Non ho bisogno di un nome per questo frammento". Questo è il motivo per cui dice che il nome è facoltativo. Se metti un nome puoi usare quel nome più tardi. Se metti un null che significa solo "aggiungi questo frammento allo stack posteriore e non ne ho più bisogno".

L'uso del nome è identificare quel frammento specifico. Questo può essere utile per esempio se si desidera ottenere quel frammento dalla FragmentManager:

addToBackStack (FRAGMENT_NAME); 
getFragmentMangager().findFragmentByTag(FRAGMENT_NAME); 
1

Penso che non si dovrebbe usare .addToBackStack (null); se si sta tentando di far scattare il Backstack, è probabile che possa generare java.lang.IllegalStateException in quanto non avrà un riferimento valido per il popout dell'ultimo elemento aggiunto. Questo deve essere controllato ... non sono sicuro al 100%.