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();
我正在制作一个有几个屏幕的应用程序,它必须可以使用后退按钮在应用程序中导航。
我的 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();