2012-12-03 10 views
13

quando inizio Camera intento, ho notato che onActivityResult viene chiamato prima dello onResume nel ciclo di vita fragment.Quando viene chiamato onActivityResult del frammento rispetto al ciclo di vita dei frammenti?

Ho anche notato che onActivityResult viene chiamato dopo onStart.

Ma ecco la parte strana: ho variabile fileUri == "qualche percorso immagine". Questa variabile è

  • NOT NULL in onStart.
  • NULL nel onActivityResult
  • NOT NULL di nuovo in onResume

vedere Logcat

12-03 14:39:42.418: D/Fragment1(29220): onStart fileUri: file:///mnt/sdcard/OPS_IMAGES/IMG_20121203_143933.jpg 
12-03 14:39:42.463: W/PhoneWindow(29220): Previously focused view reported id 2131034140 during save, but can't be found during restore. 
12-03 14:39:42.463: D/Fragment1(29220): onActivityResult fileUri is NULL!!! 
12-03 14:39:42.468: D/Fragment1(29220): onResume fileUri: file:///mnt/sdcard/OPS_IMAGES/IMG_20121203_143933.jpg 

parte peggiore è, questo accade solo il 50% del tempo. Un altro 50% suActivityResult può accedere al valore fileUri senza problemi ...

Come posso eseguire il debug di questo?

NOTA: Per semplicità, non ho incluso il codice dei miei metodi onResume, onStart, onActivityResult. Sono solo metodi di base con controllo variabile e chiamata di registro. Se necessario, modifico la domanda e aggiungo questi metodi.

NOTA2: sto utilizzando la libreria di supporto di Google per supportare i frammenti su versioni API precedenti.

+0

sei riuscito a risolvere il problema? – aProgrammer

+2

È possibile che siano istanze diverse della stessa classe 'Fragment1'? Aggiungi un 'System.identityHashCode (this)' ai log per stampare un identificatore per istanza – Xiao

risposta

1

Questa non è un'area in cui ho lavorato o un problema che ho avuto, ma se la variabile non è visibile per qualsiasi motivo ... Hai provato a utilizzare un diverso tipo di metodo per fare riferimento al valore ?

Il mio suggerimento sarebbe provare a utilizzare una variabile SharedPreferences e salvare il valore lì nell'editor e ritirare. Questa potrebbe non essere la soluzione migliore, ma potrebbe essere una soluzione per il momento.

Ho avuto il messaggio di errore simile da logcat di, che è come mi sono imbattuto nel tuo post.

"01-27 11:13:42.899: W/PhoneWindow(1591): Previously focused view reported id 16908862 during save, but can't be found during restore." 

Il modo in cui sono stato in grado di risolvere il mio problema è stato il mio "Blank Constructor" non è stato ri-instansiateing mia frammento. Nel frammento ho solo 1 variabile che è un 'ID' che viene restituito alla mia attività quando l'utente seleziona un oggetto con la sua selezione. Ho semplicemente re-instaniated il mio frammento chiamando il mio normale costruttore con i valori passati.

es.

public UIDialogFragmentVolume() { 
    this(ID); 
} 

public UIDialogFragmentVolume(int typeID) { 
    ID = typeID; 
} 

Spero che questo ti aiuti a determinare e risolvere il problema.

2

Per rispondere alla tua domanda iniziale, qui è l'ordine del ciclo di vita callback

12-09 16:38:41.800 10227-10227/org.Test I/Fragment: ## OnStart() 
12-09 16:38:41.820 10227-10227/org.Test I/Fragment: ## OnActivityResult() 
12-09 16:38:41.821 10227-10227/org.Test I/Fragment: ## OnResume() 
Problemi correlati