【发布时间】:2015-03-18 21:04:05
【问题描述】:
我有两个片段 MapScreenFragment 和 SessionSetUpFragment,它们与我的活动 MapsActivity 一起进出。我总是先去 MapScreenFragment,然后 MapScreenFragment 上会有一个按钮,它回调 MapsActivity 并用 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();
}
}
【问题讨论】:
-
只有 super.onBackPressed();在 onBackPressed() 方法中并删除所有内容并检查
-
@krishna 然后应用程序在按下后退按钮时关闭。我需要检查片段是否存在于后堆栈中,如果存在则将其弹出。就我而言,它正在从堆栈中弹出一些东西,但它似乎不是/加载 mapFrag
-
问题是,如果您将片段添加到 backstack,您不必检查它是否存在。 onBackpressed 它将从 backstack 中弹出存储的片段
-
@krishna 我明白你在说什么。当我打开应用程序备份。它会自动转到地图,所以它可能正在工作,但只是立即关闭应用程序
-
我对这个带有片段的后台堆栈如何真正工作感到有些困惑。因此,作为一种解决方法,我不会将我的片段保存在 backstack 中并覆盖 onBackPressed 并用所需的片段替换我现有的片段
标签: java android android-fragments back-stack