Android: 返回堆栈无法正常工作

Android: Back stack doesnt work properly

我正在制作一个有几个屏幕的应用程序,它必须可以使用后退按钮在应用程序中导航。

我的 MainFragment 有一个屏幕有问题。好像不认识backstack

MainFragment 从此处的 MainActivity 启动:

if (savedInstanceState == null) {
        getFragmentManager().beginTransaction().replace(R.id.container, new MainFragment()).addToBackStack("mainFragment")
                .commit();
    }

所以当应用启动时,这个片段被加载。 从这个 mainFragment 我可以导航到不同的屏幕。 我的 mainActivity 中有方法,我在 MainFragment 中调用这些方法来导航:

public void navigateToListCountriesSeen(){
    getFragmentManager().beginTransaction().replace(R.id.container, new listCountriesSeenFragment()).addToBackStack("listSeen")
            .commit();
}

public void navigateToListCountriesToSee(){
    getFragmentManager().beginTransaction().replace(R.id.container, new listCountriesToSeeFragment()).addToBackStack("listToSee")
            .commit();
}

但是每当我在 countriesSeen 或 CountriesToSee fragments/screens 中按下后退按钮时,应用程序就会关闭...

我该如何解决?

一种可能的解决方案是检查 onBackPressed 中的片段:

public void onBackPressed() {

    Fragment currentFragment =getFragmentManager().findFragmentById(R.id.ll_fragment_container);

    if(currentFragment instanceof CountriesToSee && currentFragment.isVisible()){ //if fragment for info is showing close fragment when back pressed. Otherwise close app
        removeFragment(currentFragment);

    }else{
        super.onBackPressed();
    }

}

如果您希望导航在退格键上备份,请使用addToBackStack()。这是一个例子:

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
ListCountriesSeenFragment listCountriesSeenFragment = new ListCountriesSeenFragment();
fragmentTransaction.replace(R.id.frameLayout, listCountriesSeenFragment, FRAGMENT_TAG_COUNTRIES_SEEN);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();