1

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

我在一个屏幕上遇到问题,我的 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();
}

但是,每当我在 countrySeen 或 CountryToSee 片段/屏幕中并按下后退按钮时,应用程序就会关闭......

我该如何解决?

4

2 回答 2

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();
    }

}
于 2016-02-19T19:03:45.500 回答
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();
于 2016-02-19T19:14:34.263 回答