我有两个片段MapScreenFragment和SessionSetUpFragment,它们与我的活动MapsActivity一起进出。我总是先去MapScreenFragment,然后在MapScreenFragment上有一个按钮,该按钮会回调MapsActivity并将当前片段替换为SessionSetUpFragment。因此,片段管理器堆栈应具有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
是您的第一个片段,因此您可能希望尝试在add()
方法中调用replace()
而不是login()
。并且不要将其添加到堆栈中。将MapScreenFragment
添加到后退堆栈会导致您看到空白空间。
接下来,您的sessionSetUp()
方法看起来不错。
由于已经将SessionSetUpFragment
添加到backStack中,因此无需覆盖onBackPressed()
。这一直对我有用。