Voici ma 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)
Ligne 66 de mon fragment:
FragmentTransaction ft = fm.beginTransaction();
fm est obtenu comme ceci:
Android.support.v4.app.FragmentManager fm = getFragmentManager();
Mon fragment s'étend Android.support.v4.app.Fragment
, voici mes importations:
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;
je n'avais jamais vu que je suis devenu nul pour un FragmentManager quelqu'un a une idée?
Remplacez cette getFragmentManager()
par cette getSupportFragmentManager()
et assurez-vous également que votre activité s'étend FragmentActivity
De la source de 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;
Apparemment, getFragmentManager()
renvoie la version de prise en charge du gestionnaire de fragments, mais uniquement pendant une transaction (ou le gestionnaire de fragments enfants du fragment parent).
Je vais utiliser ceci:
public FragmentManager getHostFragmentManager() {
FragmentManager fm = getFragmentManager();
if (fm == null && isAdded()) {
fm = ((AppCompatActivity)getActivity()).getSupportFragmentManager();
}
return fm;
}
CAS: Lorsque vous devez appeler Fragment (Fragment enfant) à partir d'un autre Fragment (Fragment parent)
utilisez toujours getChildFragmentManager()
au lieu de getFragmentManager()
dans votre fragment parent.