Android:后台堆栈无法正常工作

时间:2016-02-19 18:47:48

标签: android android-fragments fragment-backstack

我正在制作一个带有几个屏幕的应用程序,并且必须可以使用后退按钮浏览应用程序。

我在使用一个屏幕时出现问题,我的MainFragment。它似乎不承认后台堆。

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片段/屏幕时,按下后退按钮,应用程序就会关闭......

我该如何解决?

2 个答案:

答案 0 :(得分:0)

一种可能的解决方案是检查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();
    }

}

答案 1 :(得分:0)

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

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