2013-02-18 17 views
27

To mój StackTrace:android.support.v4.app.getFragmentManager() zwraca wartość null?

FATAL EXCEPTION: main 
java.lang.NullPointerException 
at com.example.test.fragments.LoadingFragment$1.run(LoadingFragment.java:66) 
at android.os.Handler.handleCallback(Handler.java:725) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5041) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
at dalvik.system.NativeStart.main(Native Method) 

Linia 66 mojego Fragment:

FragmentTransaction ft = fm.beginTransaction(); 

FM jest zdobyć tak:

android.support.v4.app.FragmentManager fm = getFragmentManager(); 

Moja Fragment rozciąga android.support.v4.app.Fragment, to są moje import:

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

Nigdy nie widziałem, że mam zero dla FragmentManagera, ktoś ma pomysł?

+0

Możesz opublikować sekcji importu? Czy używasz poprawnej biblioteki do FragmentTransaction? – Safime

Odpowiedz

-6

Po oczyszczeniu i odbudowy mojego projektu aswell jako ponownym moje urządzenie do testowania, to znowu jakoś działało.

+1

Nie działa, gdy jest czyste lub odbudowuje, ale upewnij się, że getFragmentManager() jest z biblioteki pomocy technicznej. Sprawdź importowanie: – Pragnani

+0

Nie ma sensu. – Gaurav

82

Wymień ten getFragmentManager()getSupportFragmentManager() z tym, a także upewnić się, że aktywność rozciąga FragmentActivity

+11

Wzywam to wewnątrz Fragmentu. Metoda wewnątrz Fragmentu wciąż nazywa się getFragmentManager, nawet w wersji Support klasy Fragment. Aktywność, w której znajduje się ten Fragment, jest aktywnością Fragmentu. –

+0

@ YallaT. call getSupportFragmentManager() nie getFragmentManager() – Pragnani

+7

nie ma metody getSupportFragmentManager() w klasie Fragment wsparcia. http://developer.android.com/reference/android/support/v4/app/Fragment.html Oczywiście, mogę użyć getActivity(). getSupportFragmentManager(), ale dlaczego to nie działa tutaj? –

1

Od android.support.v4.app.Fragment źródła:

// The fragment manager we are associated with. Set as soon as the 
// fragment is used in a transaction; cleared after it has been removed 
// from all transactions. 
FragmentManagerImpl mFragmentManager; 

Widocznie getFragmentManager() powraca wspierać wersję menedżera fragmentu ale tylko podczas transakcji (lub dziecko kierownika macierzystej fragment fragment jest).

Zamierzam to wykorzystać:

public FragmentManager getHostFragmentManager() { 
    FragmentManager fm = getFragmentManager(); 
    if (fm == null && isAdded()) { 
     fm = ((AppCompatActivity)getActivity()).getSupportFragmentManager(); 
    } 
    return fm; 
} 
+0

, więc możemy założyć, że fragment nie został dodany? – kassim

+0

co to jest "isAdded()" .. gdzie jest kod isAdded? –

+0

@GilbertoIbarra 'isAdded()' jest metodą 'Fragment'. Przypuszczam, że możesz zamiast tego użyć 'getActivity()! = Null'. –

Powiązane problemy