2012-12-04 12 views
10

In FragmentTransaction voce su Android docs si descrive che il metodo replace() è uguale chiamando il metodo remove() per tutti i frammenti aggiunte nel momento visualizzare e quindi chiamato il metodo add(). In questo caso, per recuperare il frammento precedente, potremmo usare addBackToStack(), significa che lo stato della transazione è ancora gestito dal gestore dei frammenti e annullerà la sua operazione quando siamo usciti dallo stack.Qual è la differenza tra l'uso di add(). AddToBackStack(), add(). Detach() e replace(). AddToBackStack() in FragmentTransaction?

In altra parte, quando implementiamo l'operazione utilizzando add(), oltre l'uso di add().addBackToStack(), possiamo usare il metodo detach() e recuperare il frammento usando attach(), che hanno lo stesso comportamento che addBackToStack().

Quindi qual è la differenza dietro le quinte tra questi scenari?

risposta

11

Ho studiato più e apparentemente, la differenza tra detach() e addToBackStack() è nel ciclo di vita di Fragment. Quando aggiungiamo il frammento nello stack posteriore, viene chiamato in sequenza i metodi onPause(), onStop() e dopo lo onDestroyView(). In questo stato, il frammento pulisce le risorse associate alla sua vista e "resta" lì in attesa di essere richiamato. Ritornando al layout dal back stack si chiama il metodo onCreateView() solo per il frammento per disegnare la sua interfaccia utente. In realtà, il frammento non viene distrutto.

In altra parte, quando usiamo detach() di rimuovere o sostituire il frammento, viene chiamato in sequenza tutte stessi metodi citata prima (onPause(), onStop(), onDestroyView()) aggiungere questi due metodi: onDestroy(), fare pulizia finale dello stato del frammento e onDetach(), per separare il frammento da non essere più associato alla sua attività.

Fondamentalmente, dietro le quinte, non hanno lo stesso comportamento: utilizzando lo addToBackStack() i frammenti rimangono istanziati e detach(), no.

Problemi correlati