我同时使用导航抽屉和底部导航,为此我有一个问题,即我创建了一个名为Home Fragment的片段,并在创建导航抽屉活动中调用了该片段,然后所有其他片段都返回了按钮。在底部导航中,当我单击它时,我会看到一个名为“主页”的菜单,它将打开带有后退箭头的片段,而我想使用抽屉菜单打开它,那我该怎么做?
创建时的导航抽屉代码::
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_navigation_drawer);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
fragment = getSupportFragmentManager().findFragmentById(R.id.baseframe);
final DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
// toolbar.setNavigationIcon(R.drawable.ic_menu_black_24dp);
toggle.syncState();
navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
Log.d(TAG, "Fragment back-stack count : " + getSupportFragmentManager().getBackStackEntryCount());
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true); // show back button
@SuppressLint("PrivateResource") final Drawable upArrow = getResources().getDrawable(R.drawable.ic_arrow_back_black_24dp);
upArrow.setColorFilter(getResources().getColor(R.color.white), PorterDuff.Mode.SRC_ATOP);
getSupportActionBar().setHomeAsUpIndicator(upArrow);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
} else {
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
toggle.syncState();
navigationView.getMenu().getItem(0).setChecked(true);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
drawer.openDrawer(GravityCompat.START);
}
});
if (!(fragment instanceof Homefragement)) {
getSupportFragmentManager().beginTransaction().replace(R.id.baseframe, Homefragement.newInstance(null)).commit();
navigationView.getMenu().getItem(0).setChecked(true);
}
}
if (fragment instanceof Homefragement) {
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
} else {
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
}
}
});
invalidateOptionsMenu();
getSupportFragmentManager().beginTransaction().replace(R.id.baseframe, Homefragement.newInstance(null)).commit();
navigationView.getMenu().getItem(0).setChecked(true);
}
private boolean sendBackToHome = false;
@Override
public void onBackPressed() {
if(!sendBackToHome) {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawers();
} else {
super.onBackPressed();
}
} else {
getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
getSupportFragmentManager().beginTransaction().replace(R.id.baseframe, Homefragement.newInstance(null)).commit();
}
}
以及底部导航:
case R.id.navigation_home:
menuItem.setChecked(true);
fm = getSupportFragmentManager();
getSupportFragmentManager().beginTransaction().replace(R.id.baseframe, Homefragement.newInstance(null)).commit();
return true;