2013-02-18 4 views
27

Das ist mein Stacktrace:android.support.v4.app.getFragmentManager() gibt null zurück?

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) 

Linie 66 meiner Fragment:

FragmentTransaction ft = fm.beginTransaction(); 

fm wie diese bekommen ist:

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

Mein Fragment erstreckt android.support.v4.app.Fragment, diese meine Importe sind:

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; 

ich hatte noch nie gesehen, dass ich null für einen FragmentManager hatte, hat jemand eine Idee?

+0

Können Sie Ihre Importe Rubrik? Verwenden Sie die richtige Bibliothek für FragmentTransaction? – Safime

Antwort

-6

Nach der Reinigung und Wiederaufbau mein Projekt aswell als Neustart erstreckt, arbeitete diese wieder irgendwie.

+1

Hat keine Auswirkungen beim Säubern oder Neuaufbau, aber stellen Sie sicher, dass getFragmentManager() von Support-Bibliothek ist .. überprüfen Sie die Importe – Pragnani

+0

Macht keinen Sinn. – Gaurav

82

Ersetzen Sie diese getFragmentManager() mit diesem getSupportFragmentManager() und auch sicherstellen, dass Ihre Tätigkeit mein Testgerät FragmentActivity

+11

Ich rufe dies innerhalb des Fragments an. Die Methode innerhalb des Fragments wird auch in der Support-Version der Fragment-Klasse getFragmentManager genannt. Die Aktivität, in der dieses Fragment sitzt, ist eine FragmentActivity. –

+0

@YallaT. Aufruf getSupportFragmentManager() not getFragmentManager() – Pragnani

+7

Es gibt keine getSupportFragmentManager() -Methode in der Support-Fragment-Klasse. http://developer.android.com/reference/android/support/v4/app/Fragment.html Sicher, ich könnte getActivity(). getSupportFragmentManager() verwenden, aber warum funktioniert das hier nicht? –

1

Von android.support.v4.app.Fragment Quelle:

// 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; 

Offenbar getFragmentManager() kehrt unterstützen Version von Fragment-Manager aber nur während einer Transaktion (oder Kinder Fragment Manager des Mutter Fragment).

Ich werde diese verwenden:

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

also können wir annehmen, dass das Fragment nicht hinzugefügt wird? – kassim

+0

Was ist "isAdded()" .. wo ist der Code von isAdded? –

+0

@GilbertoIbarra 'isAdded()' ist eine Methode von 'Fragment'. Ich nehme an, Sie könnten stattdessen 'getActivity()! = Null' verwenden. –