如何使用像后退按钮一样的按钮来关闭当前片段?

新手上路,请多包涵

我尝试使用 Imagebutton 关闭当前片段。

我在 Fragment-A 中,当我单击按钮时它会转到 Fragment-B。

当我点击 Fragment-B 的按钮时,它会转到 Fragment-C 并关闭 Fragment-B。

如果我单击 Fragment-C 的后退按钮,它将返回到 Fragment-A。

我尝试过的代码如下

camera_album = (ImageButton) view.findViewById(R.id.camera_album);

camera_album.setOnClickListener(new Button.OnClickListener() {
    @Override
    public void onClick(View v) {

                    closefragment();
        Fragment fragment = FileBrowserFragment.newInstance(null, null, null) ;
        MainActivity.addFragment(LocalFileBrowserFragment.this, fragment) ;

    }
});

private void closefragment() {
    getActivity().getFragmentManager().beginTransaction().remove(this).commit();
}

当我单击 fragment-B 的后退按钮时,它会转到 Fragment-C。

但是当我单击 Fragment-C 上的后退按钮时,它不会返回到 Fragment-A。它回到空的背景。如果我想返回 Fragment-A ,我必须再次单击返回按钮。

所以,它似乎没有关闭当前的片段完整。

如何像 Android 的后退按钮一样完成当前片段?

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

阅读 500
2 个回答

从片段 A 转到 B,将 A 替换为 B 并在 — addToBackstack() commit()

现在从 Fragment B 转到 C,首先使用 popBackStackImmediate() ,这将带回 A。现在将 A 替换为 C,就像第一个事务一样。

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

要删除当前片段 B 并导航到堆栈(其他片段 A):

 private fun navigateToBackStack() {
    requireActivity().supportFragmentManager
        .beginTransaction()
        .remove(this)
        .commit()
    requireActivity().supportFragmentManager.popBackStack()
}

总帐

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

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