android 如何在onBackPress方法中跳过backstack中的特定片段?

ebdffaop  于 2023-06-04  发布在  Android
关注(0)|答案(3)|浏览(154)

我的应用程序中有四个主要片段和一个次要片段。比如片段A,B,C,D在片段A处有一个ListView。如果用户点击列表项,另一个片段(子A)将显示出来。因此,如果用户单击A -> B -> C -> D。返回栈将是D -> C-> B-> A。这很简单和容易。这里是我的问题..,当用户点击一个列表项在片段A,过渡将A -> * 子A* -> B -> C -> D.但我不想在backstack上使用sub A。我想要的结果是D -> C -> B -> A。我目前正在尝试跳过子A,但仍然找不到合适的答案。

1u4esq0p

1u4esq0p1#

通过覆盖或任何特定的后退按钮使用此选项单击

FragmentManager fm = getActivity().getSupportFragmentManager();
fm.popBackStack();

像这样覆盖后退按钮

// 2.0 and above
@Override
public void onBackPressed() {
    moveTaskToBack(true);
}

// Before 2.0
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
d6kp6zgx

d6kp6zgx2#

1.在您的托管Activity中创建一个布尔标志,以跟踪是否应跳过片段子A:
public boolean footer = false;
1.当从片段子A导航到任何其他片段时,将skipFragment标志设置为true:
return true;
1.在宿主Activity中,重写onBackPressed()方法来处理后退按钮按下:

@Override
 public void onBackPressed() {
 FragmentManager fragmentManager = getSupportFragmentManager();

 // Check if Fragment should be skipped
 if (skipFragment) {
     // Clear the back stack up to Fragment A
     fragmentManager.popBackStack("FragmentATag", FragmentManager.POP_BACK_STACK_INCLUSIVE);
     skipFragment = false; // Reset the flag
     return;
 }

 super.onBackPressed();
}

确保将“FragmentATag”替换为片段A添加到回栈时使用的实际标记或名称。

Fragment selectedFragment = new FragmentA();
    MainActivity.skipFragment = true;
    getFragmentManager().beginTransaction()
            .replace(R.id.fragment_container, selectedFragment)
            .addToBackStack("FragmentATag")
            .commit();
afdcj2ne

afdcj2ne3#

我认为下面的代码是为你工作。

FragmentManager fManager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = fManager.beginTransaction();
trans.remove(myFrag);//fragment you want to remove 
trans.commit();
fManager.popBackStack();

建议

您应该使用导航组件。它非常简单,可读性更强。如果您使用Navigation Component,则可以轻松处理此类情况,同时还可以帮助您可视化应用的导航流。
尝试Navigation Component

相关问题