【问题标题】:How to go back to root fragment from 3rd/ 4th/5th fragment?如何从第 3/第 4/第 5 个片段返回根片段?
【发布时间】:2017-05-31 18:28:01
【问题描述】:

我在堆栈中有片段,例如 Main frag --> A frag --> B frag --> C frag --> D frag。

如何从 A、B、C、D 片段中的任何一个返回主片段。例如:如果我单击 D 中的按钮,我应该回到主片段。在片段 C 上单击按钮时也会发生同样的情况。并且,在从主片段单击后退按钮时,它不应返回到片段 D 或 C。

我试图从堆栈中弹出所有片段并从主片段重新开始。但它不起作用。

 private void onButtonClick(){
    MainFragment mainFrag= new MainFragment();
    getActivity().getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);//pop back stack inclusive pops all fragment
    getActivity().getSupportFragmentManager().beginTransaction().add(R.id.mainFragment, mainFragment).addToBackStack(null).commit();
}

编辑:好的,看起来上面的代码要回到主片段。但在显示主要片段一秒钟后,应用程序最小化。主片段最小化后,Android logcat 上会显示以下日志。

V/FA:屏幕曝光时间少于 1000 毫秒。未发送事件。时间:570

V/FA:活动暂停,时间:14995077

V/FA:不活动,与服务断开连接

【问题讨论】:

标签: android fragment


【解决方案1】:

如果 MainActivity 是您的 frameLayout 地点,这是我的答案:

//just add a switch method on your activity
public void switchFragment(Fragment fragment) {
    FragmentManager manager = getSupportFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    transaction.replace(R.id.mainFrame, fragment, null);
    transaction.addToBackStack(null);
    transaction.commit();
}

并在按钮的任何片段中使用它,如下所示:

private void onButtonClick(){
    (MainActivity)getActivity()).switchFragment(new the fragment));
  }

希望对你有帮助~

【讨论】:

  • 感谢您的回答。但我也想在切换片段之前清除后台堆栈。所以我可以在后按时停止转到上一个片段。所以,我使用了 FragmentManager.POP_BACK_STACK_INCLUSIVE。但它正在最小化应用程序。任何想法,如何防止回到以前的片段?
  • 如果我想阻止返回到上一个片段,我将在我的 switchFragment 方法中删除此代码transaction.addToBackStack(null);。希望它仍然可以帮助您。
【解决方案2】:
getSupportFragmentManager().popBackStackImmediate(mainFragment.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多