webentwicklung-frage-antwort-db.com.de

android.support.v4.app.getFragmentManager () gibt null zurück?

Das ist mein Stacktrace:

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)

Zeile 66 meines Fragments:

FragmentTransaction ft = fm.beginTransaction();

fm ist so geworden:

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

Mein Fragment erweitert Android.support.v4.app.Fragment, das sind meine Importe:

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 für einen FragmentManager null bekam. Hat jemand eine Idee?

30
Yalla T.

Ersetzen Sie diese getFragmentManager() durch diese getSupportFragmentManager() und stellen Sie außerdem sicher, dass Ihre Aktivität FragmentActivity erweitert.

83
Pragnani

Aus der Quelle Android.support.v4.app.Fragment:

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

Anscheinend gibt getFragmentManager() die unterstützte Version des Fragment-Managers zurück, jedoch nur während einer Transaktion (oder des untergeordneten Fragment-Managers des übergeordneten Fragments).

Ich werde dies verwenden:

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

FALL: Wenn Sie Fragment (Child fragment) von einem anderen Fragment (Parent Fragment) aufrufen müssen

verwenden Sie in Ihrem übergeordneten Fragment immer getChildFragmentManager() anstelle von getFragmentManager().

0
Vishnu Magar