我有两个 fragment MapScreenFragment 和 SessionSetUpFragment,它们与我的 Activity MapsActivity 一起进出。我总是先转到 MapScreenFragment,然后 MapScreenFragment 上会出现一个按钮,它会回调 MapsActivity 并将当前 fragment 替换为 SessionSetUpFragment。所以 fragment 管理器堆栈应该有 SessionSetUpFragment,然后是 MapScreenFragment。当我点击 SessionSetUpFragment 上的 android 后退按钮时,它显示一个空白屏幕,并且 MapScreenFragment 的 onCreateView() 或 onResume() 永远不会被调用。另一个 android 后退按钮调用将关闭应用程序。如何让 MapScreenFragment 恢复?
编辑: 如果我改变
getFragmentManager().popBackStack("sessFrag", FragmentManager.POP_BACK_STACK_INCLUSIVE);
到
getFragmentManager().popBackStack();
问题仍然存在,但在应用程序关闭之前我还有一个空白的后屏幕要经过
MapScreenFramget.java:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_map, container, false);
Log.d(TAG,"onCreateView"); //Never gets called
}
@Override
public void onResume() {
Log.d(TAG,"onResume"); //Never gets called
super.onResume();
}
MapsActivity.java:
@Override
public void logIn(){
MapScreenFragment mapFrag = new MapScreenFragment();
getFragmentManager().beginTransaction().replace(R.id.mainContainer, mapFrag).addToBackStack("mapFrag").commit();
}
@Override
public void sessionSetUp(){
SessionSetUpFragment sessFrag = new SessionSetUpFragment();
getFragmentManager().beginTransaction().replace(R.id.mainContainer, sessFrag).addToBackStack("sessFrag").commit();
}
@Override
public void onBackPressed() {
if(fm.getBackStackEntryCount() > 0) {
Log.i(TAG, fm.getBackStackEntryAt(fm.getBackStackEntryCount() - 1) + " Popped! " + (fm.getBackStackEntryCount() - 1) + " stacks left!");
getFragmentManager().popBackStack("sessFrag", FragmentManager.POP_BACK_STACK_INCLUSIVE);
}else {
super.onBackPressed();
}
}
最佳答案
由于 MapScreenFragment
是您的第一个 fragment ,您可能想尝试在 中调用
方法。并且不要将它添加到后台。将 add()
而不是 replace()
登录()MapScreenFragment
添加到后台堆栈会导致您看到空白空间。
接下来,您的 sessionSetUp()
方法看起来不错。
因为您已经将 SessionSetUpFragment
添加到 backStack,所以您不需要覆盖 onBackPressed()
。这对我一直很有效。
关于java - Android popBackStack() 不恢复以前的 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29132635/