Trying to remove fragment from view gives me NullPointerException on mNextAnim

I’ve got 3 fragments, one NavigationDrawer, one MapFragment, and one user-defined “MapInfoFragment”. I want the “MapInfoFragment” to appear semi-transparent over top of the MapFragment on certain events and disappear on others. I don’t really care if I completely remove the fragment and create a new one each time, or I just change the visibility and information displayed. Currently I’m just trying to use FragmentManager’s .hide() function, but I’ve also tried .remove and .detach with similar results.

Error:

  • Cannot find Keystore Entry. But I know it's there
  • Android get free size of internal/external memory
  • Update a Cordova/Phonegap (3.2.0) plugin into the project
  • How to show exact number of items in RecyclerView?
  • How to change the position of a spinner according to position of other spinner in two different activities
  • StaggeredGridLayoutManager reorders items
  • 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>
    

    Offending Code:

    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.hide(getFragmentManager().findFragmentById(R.id.map_info));
    ft.commit();
    

    Update 1

    I changed map_info_layout to map_info and there’s no change in the error I’m getting. I’d previously had map_info_layout defined as the id for the root FrameLayout of the MapInfoFragment’s layout xml, so I think map_info_layout and map_info were pointing to the same thing.

    Update 2: My solution

    Turned out that I had MapInfoFragment extending android.support.v4.app.Fragment instead of android.app.Fragment and I was using the android.app.FragmentTransaction instead of android.support.v4.app.FragmentTransaction. Switched everything to android.app. since I’m not interested in older device compatibility. Thanks Fllo.

    Update 3: General solution

    Stop trying to hide null objects

    Related posts:

    How do you force an orientation change in an Android Instrumentation test?
    Android GridView load items vertically
    Small Popup for Instructions, like foursquare ones
    What does android:layout_weight mean?
    Multiple and single choice test
    Cordova Ionic - App stopped unexpectedly
  • Pass Android NestedScrollView horizontal swipes to a parent View
  • Android, how to choose save file location?
  • Gradle exclude R.java in Android Javadocs when internal classes depend on R.java
  • Can't downgrade database from version `n` to `n-1` on Samsung
  • BroadcastReceiver not working after BOOT_COMPLETED
  • Gallery items overlapping (bleed in)
  • 6 Solutions collect form web for “Trying to remove fragment from view gives me NullPointerException on mNextAnim”

    I know you’ve solved this yourself, but I want to explain how this error happens, since it just happened to me.

    Basically you’re calling hide(), remove(), etc., with a null value.

    The error isn’t obvious, and the stack trace doesn’t originate from your own sources when this happens, so it’s not trivial to realise what it is.

    It also happens when you call FragmentManager.popBackstack() without there being a fragment in the backstack.

    this is because you add or show or hide a fragment which is null now,try to check if it is null ,before you use it!

    My problem was that FragmentManager’s getFragments() sometimes returns a list where some fragments are null, and I was removing those null fragments.

    It happended to me only when from one of the fragments in the navigation drawer I showed a DialogFragment by using

    newFragment.show(getFragmentManager(), "dialog");
    

    If instead I used

    newFragment.show(getChildFragmentManager(), "dialog");
    

    this did not happened.

    NOTE: The crash did not happen to me when showing or closing the dialog, but when changing to another fragment from the navigation drawer.

    Properly call show() and hide()…

        private void showFragment(int fragmentIndex, boolean addToBackStack) {
        FragmentManager fm = getFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();
        for (int i = 0; i < fragments.length; i++) {
            if (i == fragmentIndex) {
                transaction.show(fragments[i]);
            } else {
                transaction.hide(fragments[i]);
            }
        }
        if (addToBackStack) {
            transaction.addToBackStack(null);
        }
        transaction.commit();
    }
    
    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.