Based on @sonida's answer And after using the settings given by @ luca992 and @jai.
I tried the suggested codes above. But the up or back arrow on the left side of the action bar just didn't appear in my application. But, fortunately, I was able to fix it.
I had to add this extra line of code to setNavigationDrawerState () [Ref: android.support.v7.app.ActionBarDrawerToggle.setHomeAsUpIndicator ]
toggle.setHomeAsUpIndicator (R.drawable.ic_keyboard_backspace_white_24dp);
I downloaded drawable: ic_keyboard_backspace_white_24dp from Material.io
Here is the complete code:
MainActivity.java → onCreate ()
DrawerLayout drawer; ActionBarDrawerToggle toggle; @Override protected void onCreate(Bundle savedInstanceState) { // Start: Code automatically generated by Android Studio super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); drawer = (DrawerLayout) findViewById(R.id.drawer_layout); toggle = new ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.setDrawerListener(toggle); toggle.syncState(); // End: Code automatically generated by Android Studio // I had to add this listener as the "back" arrow was totally unresponsive // Thanks to @luca992 toggle.setToolbarNavigationClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); // Start: Code automatically generated by Android Studio NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); // End: Code automatically generated by Android Studio // More custom code for other stuff // ... }
MainActivity.java → setNavigationDrawerState ()
public void setNavigationDrawerState(boolean isEnabled) { if ( isEnabled ) { drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); toggle.setDrawerIndicatorEnabled(true); toggle.syncState(); } else { drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); toggle.setDrawerIndicatorEnabled(false);
MainActivity.java → onBackPressed ()
@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() > 0){ getSupportFragmentManager().popBackStack(); }else { super.onBackPressed(); } }
MainActivity.java → startFragment () [for example, a dummy function]
public void startFragment(){ MyFrag myFrag = new MyFrag(); getSupportFragmentManager() .beginTransaction() .replace(R.id.frag_container ,myFrag) .addToBackStack(null) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) .commit(); }
MyFrag.java → onViewCreated ()
@Override public void onViewCreated (View view, Bundle savedInstanceState){ super.onViewCreated(view, savedInstanceState);
MyFrag.java → onDestroyView ()
@Override public void onDestroyView(){