“Back button” using getSupportActionbar and appcompat v7 toolbar

前端 未结 8 604
时光取名叫无心
时光取名叫无心 2021-01-30 02:27

I\'m using the new toolbar from the Appcompat V7 library and I\'m making an application with navigation drawer and with fragments.

In some fragments I don\'t want to sho

8条回答
  •  栀梦
    栀梦 (楼主)
    2021-01-30 02:57

    You can do it like this:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);  
        toolbar = (Toolbar)findViewById(R.id.toolbar);
        if (toolbar != null) {
          setSupportActionBar(toolbar);
          getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }
    
        setUpNavigationDrawer();
    
        getFragmentManager().addOnBackStackChangedListener(backStackListener); // listen to the backstack of the fragment manager
    }
    

    Define the onBackSTackChangedListener:

    private FragmentManager.OnBackStackChangedListener backStackListener = new FragmentManager.OnBackStackChangedListener() {
       @Override
       public void onBackStackChanged() {
           setNavIcon();
       };
    }
    

    Set the icon according to your fragment's backstack:

    protected void setNavIcon() {
        int backStackEntryCount = getFragmentManager().getBackStackEntryCount();
        drawerToggle.setDrawerIndicatorEnabled(backStackEntryCount == 0);
    }
    

    Detect when the drawer icon is pressed:

    public boolean onOptionsItemSelected(MenuItem item) {
        if (drawerToggle.isDrawerIndicatorEnabled() && drawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
    
        switch (item.getItemId()) {
          case x:
             return true;
          default:
             return false;
        }
    }
    

    And handle the up button:

    public boolean onSupportNavigateUp() {
        onBackPressed();
        return true;
    }
    

    This works for me. Good luck.

提交回复
热议问题