Essayez de supprimer fragment de la vue me donne NullPointerException sur mNextAnim
J'ai 3 fragments, l'un NavigationDrawer, un MapFragment, et un définis par l'utilisateur "MapInfoFragment". Je veux que la "MapInfoFragment" apparaît semi-transparent sur le haut de la MapFragment sur certains événements et disparaissent sur les autres. Je ne me soucie pas vraiment si je supprimer complètement le fragment et en créer un nouveau à chaque fois, ou je viens de changer la visibilité et les informations affichées. Actuellement, je suis juste essayer d'utiliser FragmentManager de l' .hide() de la fonction, mais j'ai aussi essayé .supprimer et .détacher avec des résultats similaires.
Erreur:
03-18 14:28:10.965 24711-24711/com.[packageName].asTest D/AndroidRuntime﹕ Shutting down VM
03-18 14:28:10.965 24711-24711/com.[packageName].asTest E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.[packageName].asTest, PID: 24711
java.lang.NullPointerException: Attempt to write to field 'int android.app.Fragment.mNextAnim' on a null object reference
at android.app.BackStackRecord.run(BackStackRecord.java:658)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
Activity_main.xml:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.[packageName].asTest.MainActivity">
<!-- As the main content view, the view below consumes the entire
space available using match_parent in both dimensions. -->
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:id="@+id/map"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
map:cameraZoom="8"
map:mapType="satellite"
map:uiRotateGestures="false"
android:layout_gravity="center_horizontal|top"
/>
</FrameLayout>
<fragment android:id="@+id/navigation_drawer"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
android:name="com.[packageName].asTest.NavigationDrawerFragment"
tools:layout="@layout/simple_list_item_1" />
<fragment android:id="@+id/map_info"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.[packageName].asTest.MapInfoFragment" />
</android.support.v4.widget.DrawerLayout>
Code Fautif:
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.hide(getFragmentManager().findFragmentById(R.id.map_info));
ft.commit();
Mise à jour de 1
J'ai changé map_info_layout
à map_info
et il n'y a pas de changement dans l'erreur que je reçois. J'avais déjà eu map_info_layout
définie comme l'id de la racine FrameLayout de la MapInfoFragment de la mise en page xml, donc je pense que map_info_layout
et map_info
ont été pointant vers la même chose.
Mise à jour 2: Ma solution
S'est avéré que j'avais MapInfoFragment
l'extension de android.support.v4.app.Fragment
au lieu de android.app.Fragment
et j'ai été en utilisant le android.app.FragmentTransaction
au lieu de android.support.v4.app.FragmentTransaction
. Commutation de tout à android.app.
puisque je ne suis pas intéressé par les anciens la compatibilité de l'appareil. Grâce Fllo.
Mise à jour 3: solution Générale
Arrêter d'essayer de cacher des objets null
- Peut-être que je me trompe, mais je ne vois pas un fragment nommé
map_info_layout
, dans votre mise en page, je ne voismap_info
.
Vous devez vous connecter pour publier un commentaire.
Je sais que vous avez résolu ce problème vous-même, mais je tiens à expliquer comment cette erreur se produit, car il m'est juste arrivé.
Fondamentalement, vous êtes d'appel
hide()
,remove()
, etc., avec une valeur nulle.L'erreur n'est pas évident, et la trace de la pile ne vient pas de vos propres sources lorsque cela se produit, il n'est donc pas trivial à réaliser ce qu'il est.
Attempt to write to field 'int *.mNextAnim' on a null object reference
est déclenché lorsque vous essayez d'afficher() ou de masquer() en passant null fragment. F.getFragmentManager().findFragmentById(R.id.faultyFragment)
au lieu degetFragmentManager().findFragmentById(mReferenceToFaultyFragment.getId())
. J'ai eu la référence dansonCreateView()
Il se produit également lorsque vous appelez
FragmentManager.popBackstack()
sans qu'il y ait un fragment de la backstack.popBackStackImmediate()
au lieuc'est parce que vous ajoutez ou d'afficher ou de masquer un fragment qui est nul maintenant,essayez de vérifier si elle est null ,avant de l'utiliser!
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
Mon problème est que l'FragmentManager de getFragments() retourne parfois une liste où certains fragments sont nulles, et j'ai été la suppression de ces null fragments.
Elle lancée à moi que lorsque de l'un des fragments dans le tiroir de navigation j'ai montré une DialogFragment en utilisant
Si au lieu de cela j'ai utilisé
cela ne s'est pas produit.
REMARQUE: L'accident n'est pas arrivé à moi lors de l'affichage ou de la fermeture de la boîte de dialogue, mais lors d'un changement vers un autre fragment de la navigation d'un tiroir.
Appeler correctement show() et hide()...