我正在制作一个带有几个屏幕的应用程序,并且必须可以使用后退按钮浏览应用程序。
我在使用一个屏幕时出现问题,我的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片段/屏幕时,按下后退按钮,应用程序就会关闭......
我该如何解决?
答案 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();