简体   繁体   中英

Set Toolbar Home Navigation Button to Follow backstack, Android

I have set up a toolbar and added a home navigation button as follows;

Toolbar toolbar;
toolbar = (Toolbar) findViewById(R.id.toolbar_home);

//Setup toolbar
toolbar.setTitle("Home");

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    toolbar.setTitleTextColor(getResources().getColor(R.color.icons,null));
}else{
    toolbar.setTitleTextColor(getResources().getColor(R.color.icons));
}

setSupportActionBar(toolbar);
if (getSupportActionBar() != null) {
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
} else {
    Log.w("Home", "toolbar null");
}

toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //Navigate backwards as android back button
    }
});

I want when i press the toolbar backbutton, it navigates backwards following the backstack as the the android backbutton. enter image description here

add this method in activity:

@Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        if(item.getItemId() == android.R.id.home){
            onBackPressed();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

I am following this from long time and not found any issue yet .

HomeFragment : First fragment which getting loaded first time

getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
                @Override
                public void onBackStackChanged() {
                    HomeFragment currentHomeFragment = null;
                    currentHomeFragment = (HomeFragment) getFragmentManager().findFragmentByTag("HOME_FRAGMENT");
                    if (currentHomeFragment != null && currentHomeFragment.isVisible()) {
                        getSupportActionBar().setDisplayHomeAsUpEnabled(false);
                        toggle.syncState();
                        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                drawer.openDrawer(GravityCompat.START);
                            }
                        });
                    } else {
                        if (getFragmentManager().getBackStackEntryCount() > 1) {
                            getSupportActionBar().setDisplayHomeAsUpEnabled(true); // show back button
                            toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    getFragmentManager().popBackStackImmediate();
                                }
                            });

                        } else {
                            getSupportActionBar().setDisplayHomeAsUpEnabled(false);
                            toggle.syncState();
                            toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    drawer.openDrawer(GravityCompat.START);
                                }
                            });
                        }
                    }
                }
            });

If you are using android.support.v7.widget.Toolbar add this code to your AppCompatActivity:

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

in your onClick write onBackPressed(); or in manifest

    <activity android:name=".XYZActivity"
              android:parentActivityName=".MainActivity" />
  1. Setup toolbar in MainActivity onCreate() method.

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_home); toolbar.setTitle("Activity Name"); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); 
  2. Setup back navigation by implementing below method in MainActivity Level.

    @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); return true; default: return super.onOptionsItemSelected(item); } }

  3. Works well..

@Rajesh

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