Android 按下“后退”按钮时,无法按标记找到片段

Android 按下“后退”按钮时,无法按标记找到片段,android,android-fragments,navigation-drawer,back,Android,Android Fragments,Navigation Drawer,Back,我有两个片段,即FoodFragment和WishlistFragment当我通过NavigationView按它们各自的项目时,这两个片段被打开 我面临的问题是,当我按下导航项时,与它们对应的片段会打开,一切正常,但当我按下后退按钮时,会调用MainActivity的onBackPressed()方法,它只对我编写的片段的第一个条件有效 这是我的密码: public boolean onNavigationItemSelected(@NonNull MenuItem item) {

我有两个片段,即
FoodFragment
WishlistFragment
当我通过
NavigationView
按它们各自的项目时,这两个片段被打开

我面临的问题是,当我按下导航项时,与它们对应的片段会打开,一切正常,但当我按下后退按钮时,会调用MainActivity的
onBackPressed()
方法,它只对我编写的片段的第一个条件有效

这是我的密码:

public boolean onNavigationItemSelected(@NonNull MenuItem item) {

        int id = item.getItemId();
        mFragmentTransaction = getSupportFragmentManager().beginTransaction();

        if (id == R.id.food) {

            if(newFragment == null) {
                newFragment = FoodFragment.newInstance("food", "fragment");
                mFragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                mFragmentTransaction.replace(R.id.appBar, newFragment, "FoodFragment").addToBackStack("FoodFragment").commit();
            }

        }else if(id == R.id.wishlist){
            if(wishFragment == null){
                wishFragment = WishlistFragment.newInstance("wish", "fragment");
                mFragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                mFragmentTransaction.replace(R.id.appBar, wishFragment, "WishFragment").addToBackStack("WishFragment").commit();
            }
        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
下面是onBackPressed()方法:

正如您在代码中看到的那样,我已经向每个片段添加了标记,并通过
onBackPressed()
方法处理它们。在这里,当我打开
WishFragment
并按下后退按钮时,所有内容都被清除,因此我可以通过按下相应的导航项再次打开
WishFragment
。但是,如果出现
FoodFragment
,当我打开片段并按下后退按钮时,与之对应的条件没有执行,因此,我无法再次打开
FoodFragment

但是,如果我像这样更改
onBackPressed()
中条件的顺序:

public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        try {
            if (drawer.isDrawerOpen(GravityCompat.START)) {
                drawer.closeDrawer(GravityCompat.START);
            }else if (getSupportFragmentManager().findFragmentByTag("FoodFragment").isVisible()) {
                getSupportFragmentManager().popBackStack();
                newFragment = null;
            }  else if(getSupportFragmentManager().findFragmentByTag("WishFragment").isVisible()){
                getSupportFragmentManager().popBackStack();
                wishFragment = null;
            }else {
                super.onBackPressed();
            }
        }catch (NullPointerException npe){
            super.onBackPressed();
        }
    }
它现在似乎可以使用
FoodFragment
,但不能使用
wishffragment
,因此我可以再次打开
FoodFragment
,但不能打开
wishffragment
。我已经在很多网站上搜索过这个问题,但是我无法得到正确的答案

我通过为片段添加
view.setOnKeyListener(//通过KeyEvents调用MainActivity)
解决了这个问题,但是,这似乎不是一个好方法,因为它再次重新加载我的整个
MainActivity

我不知道我哪里做错了。请给我一个更好的方法


谢谢。

WISHFRAMENT
打开并按下后退按钮时

getSupportFragmentManager().findFragmentByTag(“FoodFragment”).isVisible()

这会引发NullPointerException

因此它将始终执行
super.onBackPressed()
,因为您正在捕获所有
NullPointerException

要解决此问题,请将if-else语句更改为

if (drawer.isDrawerOpen(GravityCompat.START)) {
    drawer.closeDrawer(GravityCompat.START);
} else if (getSupportFragmentManager().findFragmentByTag("FoodFragment") != null && getSupportFragmentManager().findFragmentByTag("FoodFragment").isVisible()) {
    getSupportFragmentManager().popBackStack();
    newFragment = null;
} else if(getSupportFragmentManager().findFragmentByTag("WishFragment") != null && getSupportFragmentManager().findFragmentByTag("WishFragment").isVisible()){
    getSupportFragmentManager().popBackStack();
    wishFragment = null;
} else { 
    super.onBackPressed();
}
if (drawer.isDrawerOpen(GravityCompat.START)) {
    drawer.closeDrawer(GravityCompat.START);
} else if (getSupportFragmentManager().findFragmentByTag("FoodFragment") != null && getSupportFragmentManager().findFragmentByTag("FoodFragment").isVisible()) {
    getSupportFragmentManager().popBackStack();
    newFragment = null;
} else if(getSupportFragmentManager().findFragmentByTag("WishFragment") != null && getSupportFragmentManager().findFragmentByTag("WishFragment").isVisible()){
    getSupportFragmentManager().popBackStack();
    wishFragment = null;
} else { 
    super.onBackPressed();
}