Cicli di vita dei frammenti / attività e cambiamento dell'orientamento

I frammenti sono cose divertenti, ma pensavo, una volta che conoscete i loro quirks, sono uno strumento prezioso per la scrittura di un codice buono per più dispositivi.

Tuttavia, durante la riparazione di un bug di modifica orientamento che ho eseguito contro un muro. Per il mio frammento di lavoro, ha bisogno di accedere a una vista che appartiene all'attività di contenimento che mi port in una caccia allegra cercando di scoprire come interagiscono i loops di vita di Activity & Fragment.

  • Imansible rilevare Sony Xperia in Eclipse
  • Creazione di una tabella / griglia con una colonna congelata e intestazioni congelate
  • Condividi l'image da android a facebook?
  • SoftKeyboard che nasconde EditText
  • Android - come scaricare il file dal webserver
  • Eccezione: pacchetto Android non appartiene al 2000
  • Sto aggiungendo un frammento alla vista Attività che è nel metodo onCreate() :

     // Only add a fragment once, as after it's been added it cannot be replaced (Even though there is a .replace() method. Which is a massive gaping hole in fragments as a technology if you ask me) if(savedInstanceState == null) { MainMenuFragment menu= new MainMenuFragment(); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.menuFrame, menu); transaction.commit(); } 

    Vincente a questa attività-> Ciclo di vita del frammento:

     01-04 15:17:27.226: W/SinglePaneActivity 0: onCreate() 01-04 15:17:27.378: W/MainMenuFragment 0: onAttach() to SinglePaneActivity 0 01-04 15:17:27.378: W/MainMenuFragment 0: onCreate() 01-04 15:17:27.453: W/MainMenuFragment 0: onActivityCreated() 01-04 15:17:27.476: W/MainMenuFragment 0: onStart() 01-04 15:17:27.476: W/SinglePaneActivity 0: onStart() 01-04 15:17:27.476: W/SinglePaneActivity 0: onResume() 01-04 15:17:27.476: W/MainMenuFragment 0: onResume() 

    Un cambiamento di orientamento sottolinea tuttavia che questo non è di solito il caso, un frammento di metodo onCreate() non viene chiamato dopo che è il genitore Attività onCreate() . Infatti, la prima chiamata a ciclo di vita di un onAttach() di un frammento si verifica prima che l'attività sia stata creata (il null viene passato come argomento):

     01-04 15:10:49.589: W/MainMenuFragment 0: onPause() 01-04 15:10:49.589: W/SinglePaneActivity 0: onPause() 01-04 15:10:49.589: W/MainMenuFragment 0: onStop() 01-04 15:10:49.589: W/SinglePaneActivity 0: onStop() 01-04 15:10:49.589: W/MainMenuFragment 0: onDestroyView() 01-04 15:10:49.589: W/MainMenuFragment 0: onDestroy() 01-04 15:10:49.589: W/MainMenuFragment 0: onDetach() 01-04 15:10:49.609: W/SinglePaneActivity 0: onDestroy() 01-04 15:10:49.617: W/MainMenuFragment 1: onAttach() to null 01-04 15:10:49.617: W/MainMenuFragment 1: onCreate() 01-04 15:10:49.617: W/SinglePaneActivity 1: onCreate() 01-04 15:10:49.890: W/MainMenuFragment 1: onActivityCreated() 01-04 15:10:49.917: W/MainMenuFragment 1: onStart() 01-04 15:10:49.917: W/SinglePaneActivity 1: onStart() 01-04 15:10:49.921: W/SinglePaneActivity 1: onResume() 01-04 15:10:49.921: W/MainMenuFragment 1: onResume() 

    Non ho assolutamente idea di come sta succedendo. Qualcuno potrebbe far luce su perché Fragment.onAttach() sia chiamato prima che contiene l'attività sia stata creata?

    I frammenti che ho bisogno che non hanno bisogno dell'accesso alla loro attività contenente (fino all'interazione UI) funzionano come previsto.

  • Mostra la visualizzazione personalizzata sotto l'elemento RecyclerView spostato
  • perché l'UI non viene mostrato finché non si rompe il ciclo while?
  • W / CameraBase: Si è verificato un errore durante la connessione alla camera: 0 sulla chiamata camera.open ()
  • Come escludere un file jar dal mio objective di generazione della libreria Android
  • Ottenere l'ID di articolo ListView dall'ID di row di ListAdapter
  • La window di dialogo Android Alert sostituisce il blu predefinito con un altro colore
  • One Solution collect form web for “Cicli di vita dei frammenti / attività e cambiamento dell'orientamento”

    Argh,

     01-04 15:46:23.175: W/MainMenuFragment 0: onAttach() to SinglePaneActivity 0 01-04 15:46:23.179: W/MainMenuFragment 0: onCreate() 01-04 15:46:23.246: W/MainMenuFragment 0: onActivityCreated() with Activity SinglePaneActivity 0 01-04 15:46:23.269: W/MainMenuFragment 0: onStart() 01-04 15:46:23.269: W/SinglePaneActivity 0: onStart() 

    Perché il onAttach() c'è un metodo onAttach() non ho idea. Soprattutto perché "albind" avviene prima che esista un'attività.

    Il metodo che ho avuto bisogno era ovviamente, onActivityCreated() che avviene come ultima chiamata nel set "Creazione" degli events di ciclo di vita di Fragment .

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.