【问题标题】:How to Remove All Previous Fragments from Current Fragment except current one and first one?如何从当前片段中删除所有以前的片段,除了当前片段和第一个片段?
【发布时间】:2016-06-11 12:09:59
【问题描述】:

我有一个这样的片段堆栈

F1 -> F2 -> F3 -> F4 -> F5

现在我需要删除 F2、F3、F4 片段。

如果我从 F5 片段按下返回按钮,我需要它应该转到 F1。

注意:我不会从活动中更改片段片段。从片段中改变片段。

【问题讨论】:

标签: android android-fragments android-activity


【解决方案1】:

销毁Fragment F5 清除Back Stack 直至F2

试试这样的:

您的MainActivity 中的public 方法:

public void clearBackStackInclusive(String tag) {
     getSupportFragmentManager().popBackStack(tag, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}

现在在您的F5 片段中:

@Override
public void onDestroy() {
   super.onDestroy();
   ((MainActivity)getActivity()).clearBackStackInclusive("tag"); // tag (addToBackStack tag) should be the same which was used while transacting the F2 fragment
}

Reference

【讨论】:

    【解决方案2】:

    您可以使用标志管理任务。例如,这将清除 home 顶部的所有活动。

    Intent intent = new Intent(getApplicationContext(), Home.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent)
    

    因此,如果您在 Home Activity 上开始了 4 个或 5 个或更多任务,您可以在第五个调用完成并返回家中。

    我期待它的片段版本,但这取决于您管理任务的方式。

    编辑

    我为片段找到了它:

    FragmentManager.popBackStack(String name, FragmentManager.POP_BACK_STACK_INCLUSIVE)
    

    这将弹出所有状态到指定的状态。

    【讨论】:

      【解决方案3】:

      你可以实现这种行为,使用 F1 来管理每一个想法。 假设您正在执行一个过程,那么每个步骤都取决于最后一个答案。你所要做的就是回到 F1 你得到的每一个答案,而不是让 F1 打开下一步。 例如:
      1° 在 F1 中你说你要显示一个人的电话号码
      2° F1 呼叫 F2 是您搜索名称。当用户选择名称时 F2 返回到 F1 名称并关闭
      3° F1 得到的名字比 F2 返回的名字和用这个名字调用 F3 和 F3 显示数字

      不是很花哨,但至少在我不得不做类似的事情时对我有用。

      【讨论】:

        猜你喜欢
        • 2017-06-12
        • 1970-01-01
        • 2017-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多