2012-12-03 12 views
13

kiedy zaczynam intencję Camera, zauważyłem, że onActivityResult jest wywoływane przed onResume w cyklu życia fragment.Kiedy wywoływany jest fragment onActivityResult w odniesieniu do cyklu życia fragmentów?

Zauważyłem również, że onActivityResult jest wywoływane po onStart.

Ale tu jest ta dziwna część: mam zmienną fileUri == "jakaś ścieżka obrazu". Ta zmienna to

  • NOT NULL w onStart.
  • NULL w onActivityResult
  • NOT NULL ponownie w onResume

zobaczyć 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 

Najgorsze jest to się dzieje tylko 50% czasu. Kolejne 50% atActivityResult może uzyskać dostęp do wartości fileUri bez problemu ...

Jak mam to debugować?

UWAGA: Ze względu na prostotę nie zawierałem kodu moich metod onResume, onStart, onActivityResult. Są to tylko podstawowe metody ze zmiennym sprawdzaniem i logowaniem. W razie potrzeby edytuję pytanie i dodaję te metody.

UWAGA2: używam biblioteki wsparcia google do obsługi fragmentów w starszych wersjach interfejsu API.

+0

Czy uda Ci się rozwiązać ten problem? – aProgrammer

+2

Czy to możliwe, że są one różnymi instancjami tej samej klasy 'Fragment1'? Dodaj "System.identityHashCode (this)" do dzienników, aby wydrukować identyfikator każdej instancji – Xiao

Odpowiedz

1

Nie jest to obszar, w którym majstrowałem lub problem, który miałem, ale jeśli twoja zmienna nie jest widoczna z jakiegoś powodu ... Czy próbowałeś użyć innego sposobu do odniesienia wartości ?

Moja sugestia to próba użycia zmiennej SharedPreferences i zapisanie jej tam w Edytorze oraz wycofanie jej. To może nie być najlepsze rozwiązanie, ale może być na razie rozwiązaniem.

Miałem podobny komunikat o błędzie z logcat z, tak natknąłem się na twój 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." 

Sposób udało mi się rozwiązać mój problem był mój „Blank Konstruktor” nie został ponownie instansiateing mój fragment. W tym fragmencie mam tylko 1 zmienną będącą "ID", która jest przekazywana z powrotem do mojej aktywności, gdy użytkownik wybierze przedmiot z jego wyborem. Po prostu ponownie zainicjowałem mój fragment, wywołując mój normalny konstruktor wartościami przekazanymi.

np.

public UIDialogFragmentVolume() { 
    this(ID); 
} 

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

Mam nadzieję, że pomoże to ustalić i rozwiązać problem.

2

Aby odpowiedzieć na oryginalne pytanie, tutaj jest kolejność Lifecycle Callbacki

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() 
Powiązane problemy