我的应用程序使用包含 2 个部分的导航抽屉。
第一节 人物列表、收藏夹列表
第 2 部分:所有字符列表
字符列表具有与导航抽屉中的第 2 部分相同的字符选择。从第 1 部分的"字符列表"或"收藏夹列表"或抽屉中的列表中选择字符将打开字符页面。
当我在字符页面上时,我希望后退按钮将用户带回字符列表或收藏夹列表(以上次访问者为准(,但永远不会返回到上一个字符页面(如果它是从导航抽屉中选择的(。
我的抽屉项目侦听器:
public void getDrawerItemClickListener() {
mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
public boolean onNavigationItemSelected(MenuItem menuItem) {
mDrawerLayout.closeDrawers();
int selection = menuItem.getItemId();
String name = menuItem.getTitle().toString();
if(selection == R.id.nav_home) {
Fragment myFragment = new HomeFragment();
replaceFragment(myFragment);
}
if(selection == R.id.nav_fav) {
Fragment myFragment = new FavFragment();
replaceFragment(myFragment);
}
for(int i = 0; i < characters.size(); i++) {
if(characters.get(i).getName().equals(name))
{
Fragment myFragment = new TabFragment();
myFragment.setArguments(createCharacterBundle(characters.get(i)));
replaceFragment(myFragment);
break;
}
}
return false;
}
});
}
我的替换片段方法:
public void replaceFragment(Fragment myFragment) {
FragmentTransaction transaction = mFragmentManager.beginTransaction();
transaction.replace(R.id.containerView, myFragment);
transaction.commit();
}
还有我的背压方法:
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
mDrawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
}
@Override
public void onDrawerOpened(View drawerView) {
mDrawerOpen = true;
}
@Override
public void onDrawerClosed(View drawerView) {
mDrawerOpen = false;
}
@Override
public void onDrawerStateChanged(int newState) {
}
});
public void onBackPressed() {
if (mDrawerOpen) {
mDrawerLayout.closeDrawer(DrawableItemResourceID);
return;
} else {
super.onBackPressed();
}
}