java - Android popBackStack() 不恢复以前的 fragment

标签 java android android-fragments back-stack

我有两个 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();

问题仍然存在,但在应用程序关闭之前我还有一个空白的后屏幕要经过

enter image description here enter image description here

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/

相关文章:

java - 如何打印到文件?

java - 从另一个应用程序启用 BCMON

android - https 简单获取请求

java - setBackgroundColor 被忽略

android - 有没有办法对 Firebase 中的只读对象进行版本控制?

java - 是否可以限制一个类的某些成员对另一个类的访问,但不能限制所有其他类的访问?

java - 如何向 Spring MVC View 公开 Spring bean?

java - 在Fragment的布局中显示ZXING条码扫描仪

android - 如何保存最后一个 fragment 的数据

Java 堆栈 : Don't allow duplicates fragment entries into stack