如何从活动返回到上一个片段?

新手上路,请多包涵

我有一个带有导航抽屉的应用程序,它正在切换片段。从其中一个片段中,我调用了一个新活动。当我在此活动中(在工具栏中)单击返回时,我想返回到上一个选定的片段,但它却让我回到了第一个片段。我正在将我的片段添加到返回堆栈中,所以这应该不是问题。

这是我已经尝试过的:

我在第二个活动中覆盖了 onBackPressed 方法,如下所示:

 @Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() == 0) {
        this.finish();
    } else {
        getFragmentManager().popBackStack();
    }
}

它不工作。我还在 onsaveinstancestate 方法中保存了当前片段的索引并检索它但结果相同。我还尝试始终将当前片段放入变量中并尝试重新显示它,但它仍然不起作用。还有什么我可以尝试的吗?

有趣的事实:如果我在底部面板内按回,它实际上会返回到上一个片段。

编辑:这是我这样做的代码:

  private void replaceFragment(Fragment fragment)
 {
     if (fragment != null)
     {
         FragmentManager manager = getSupportFragmentManager();
         manager.beginTransaction()
                    .replace(R.id.main_content, fragment)
                    .addToBackStack(null)
                    .commit();
        }
    }

如果 savedInstanceState 为空,我只添加第一个片段,如下所示:

 if (savedInstanceState == null) {
    // first time
    mTitle = getResources().getString(R.string.home);
    replaceFragment(HomeFragment.newInstance());
}

是的,所有这些都是在 onCreate() 方法中完成的。

原文由 MaTTo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 214
2 个回答

我有同样的问题并得到修复。您唯一需要做的就是覆盖活动中的方法“onOptionsItemSelected”:

 @Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

android.R.id.home 是菜单中的第一个片段。

原文由 L.L. 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题