【问题标题】:How to move 4 steps back on Fragment OnBackPress in Android如何在 Android 中的 Fragment OnBackPressed 上后退 4 步
【发布时间】:2023-03-10 21:22:01
【问题描述】:

我有 4 个碎片。 A B C D

我只在后台保留了片段 A。 我从片段 A -> B -> C -> D

现在在 Fragment D 的 backpress 上,我应该重定向到 Fragment A,但现在 A 和 D Fragment 一起显示在屏幕上。 如何隐藏片段 D?

【问题讨论】:

  • 设置其他片段addToBackstack(null),在你的情况下是B、C和D
  • 当你从片段 A 移动到 B 和 B 到 C 和 C 到 D 时不要使用 addToBackstack(null) 因为它将片段推入堆栈只在你第一次使用片段时使用它A,希望对你有帮助
  • 尝试做 addToBackStack(null) 但它从 D 回到 C ,从 C 到 B 和从 B 到 A
  • 第一次尝试 addToBackStack(null) 一次,但是从 D 中的 onBackPress,它在屏幕上同时显示 D 和 A

标签: android navigation fragment


【解决方案1】:

如果你 popbackstack ..添加片段 A 并启动任何片段..

例如:

Fragment fragmentA = new FragmentA();

Fragment fragmentD = new FragmentD();

FragmentManager manager = getFragmentManager();

FragmentTransaction transaction = manager.beginTransaction();

manager.popBackStack();

transaction.addToBackStack(fragmentA.getClass().getName());

transaction.replace(R.id.frame_container, fragmentD);

transaction.commit();

【讨论】:

    【解决方案2】:

    步骤 1:在包含 Frame Layout 的 Main Activity 中编写代码,它的名称是 fragcontainer

     getSupportFragmentManager().beginTransaction().add(R.id.frgContainer,new FragOne(),FragOne.class.getName()).commit();
    

    在“FragOne”上编写代码

     FragThird FragThird = new FragThird();
            FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
            ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left, R.anim.slide_in_right, R.anim.slide_out_right);
            // ft.addToBackStack(FragTrackView.class.getName());
            ft.add(R.id.frgContainer, FragThird, FragFourth.class.getName());
            ft.commit();
    

    同样是添加 2 个 Fragment 和 Last Fragment 像这样添加

     FragFourth FragFourth= new FragFourth();
            FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
            ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left, R.anim.slide_in_right, R.anim.slide_out_right);
             ft.addToBackStack(FragFourth.class.getName());
            ft.add(R.id.frgContainer, FragFourth, FragFourth.class.getName());
            ft.commit();
    

    【讨论】:

    • ft.addToBackStack(FragFourth.class.getName());如果您不需要,则此行将 Fragment 添加到后台堆栈中,然后注释或删除该行
    猜你喜欢
    • 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
    相关资源
    最近更新 更多