简体   繁体   中英

How to Navigate back on a navigation Drawer

I have create a navigation drawer with three fragment. I need the home fragment to have a transparent toolbar and the other 2 fragments to have a visible toolbar with title. This work fine as indicated in my code here but when the user tries to click on the back button of the phone two errors happen. 1)When the user is in fragment three and click back button the data in fragment 3 is not replaced on back press such that on fragment 2 on backpress the user can still see part of fragment 3 data. 2)On continous backpress am getting this error from my fragment one.

java.lang.IllegalStateException: Fragment already added: CustomerFragment{42208250 #0 id=0x7f0900ef frag1}
        at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1916)
        at android.support.v4.app.BackStackRecord.executePopOps(BackStackRecord.java:828)
        at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2622)
        at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
        at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
        at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:146)
        at android.app.ActivityThread.main(ActivityThread.java:5756)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
        at dalvik.system.NativeStart.main(Native Method)

You must manage fragment transaction for your drawer fragement in onBackPress() of your MainActivity check below code for your help ;)

@Override
    public void onBackPressed() 
    {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } 
        else if (getSupportFragmentManager().getBackStackEntryCount() > 1)
        {
                Log.e(TAG, "onBackStackChanged if: " + getSupportFragmentManager().getBackStackEntryCount());
                getSupportFragmentManager().popBackStack();
        }
        else
        {
            super.onBackPressed();
        }
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM