【问题标题】:Fragment blank after popBackStackpopBackStack 后的片段空白
【发布时间】:2015-02-27 20:31:12
【问题描述】:

我有这个活动,我用偏好片段替换主要片段。当我在查看首选项后单击返回时,我会看到我的片段应该位于的空白(白色)区域。如果我旋转屏幕,那么它工作得很好。我的片段中的一切似乎都很好,只是它是空白的。这是我的方法:

活动的 onCreate 方法。

 @Override
    protected void onCreate(Bundle savedInstanceState) {
          .....
        if (savedInstanceState == null) {

          getFragmentManager().beginTransaction()
                    .add(MAIN_CONTAINER, new MainFragment())
                    .commit();
        }
    }

首选项片段的开头:

public void startPreferencesFragment() {
        FragmentManager mFragmentManager = getFragmentManager();
        FragmentTransaction mFragmentTransaction = mFragmentManager
                .beginTransaction();
        MyPreferencesFragment mPrefsFragment = new MyPreferencesFragment();
        mFragmentTransaction.addToBackStack(null)
                .replace(MAIN_CONTAINER, mPrefsFragment)
                .commit();
    }

我的活动的 onBackPressed:

@Override
    public void onBackPressed() {

        FragmentManager fm = getFragmentManager();

        if (fm.getBackStackEntryCount() > 0) {
            fm.popBackStack();

            return;

        }else {
            super.onBackPressed();
        }
    }

那我做错了什么?

谢谢。

编辑:如果我打开首选项然后旋转然后按回,一切正常。

我还应该提到,删除 onBackPressed 方法并不能解决问题,它只会退出应用程序。

编辑:结果证明片段返回堆栈根本不是问题。基本上我的片段有一个recyclerview,这就是它的全部。我在 recyclerview 上设置的适配器实例被保留,而当从后端堆栈中带回片段时,recyclerview 本身是新的,并且我在设置适配器时检查适配器是否为空。

【问题讨论】:

  • 你为什么要覆盖onBackPressed?超类已经在后台处理弹出事务
  • 这是我一直听到的,但如果我不这样做,那么应用程序就会退出。

标签: android android-fragments android-navigation


【解决方案1】:

您已经将交易添加到后台,无需覆盖onBackPressed();当按下后退按钮时,框架会自动将Fragment 从堆栈中弹出。我很确定您正在“双重”弹出后台堆栈。

【讨论】:

  • 我试过没有那个,然后应用程序就退出了。我还应该提到,如果我打开设置屏幕然后旋转,后退按钮可以正常工作。
  • 如果我在上面的确切代码上执行此操作,这意味着 super.onBackPressed() 永远不会被调用,那么什么都不会发生。
  • 嗯,这不是正确的答案,因为它不能解决问题,而且我个人发现,一旦有答案,特别是有一个赞成票的答案,大多数人往往会忽略这个问题。一旦我被允许这样做,我将删除反对票,因为显然你不能经常更改投票。
  • 调用replace()后移动addToBackStack()会怎样
猜你喜欢
  • 1970-01-01
  • 2014-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
相关资源
最近更新 更多