Android 同时替换多个片段

Android 同时替换多个片段,android,android-fragments,Android,Android Fragments,我有一个带有导航抽屉的活动。我已经为此使用了片段,当我移动到抽屉中的不同菜单时,我使用addToBackStack()方法将它们添加到backstack中。基本上,活动以片段A开始,然后如果我转到片段B或片段C,我可以按back键并返回到片段A 但是现在我有一个通知,它应该打开活动,打开片段B,当我按下back键时,它应该将我带回片段a。在startActivities中是否有类似的处理方法 以下是活动的代码: @Override protected void onCreate(Bundle s

我有一个带有导航抽屉的
活动
。我已经为此使用了片段,当我移动到抽屉中的不同菜单时,我使用
addToBackStack()
方法将它们添加到backstack中。基本上,
活动
片段A开始,然后如果我转到片段B片段C,我可以按back键并返回到片段A

但是现在我有一个通知,它应该打开
活动
,打开片段B,当我按下back键时,它应该将我带回片段a。在
startActivities
中是否有类似的处理方法

以下是
活动的代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...

    getSupportFragmentManager().beginTransaction().replace(R.id.layoutContent, new FragmentA()).commit();
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.buttonA:
            getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

            break;

        case R.id.buttonB:
            transactFragment(new FragmentB());

            break;
        ...
     }
 }

private void transactFragment(Fragment fragment) {
    getSupportFragmentManager().beginTransaction().replace(R.id.layoutContent, fragment).addToBackStack(fragment.getClass().getName()).commit();
}

为什么不使用标记定义片段并根据需要调用它们呢

以下是我如何处理片段的示例:

活动
onCreate()
方法中启动片段,如下所示:

/** Load screen1 */
    Instructions screen1 = new Instructions();
    screen1.setArguments(getIntent().getExtras());

    getFragmentManager().beginTransaction().
            add(com.example.tool.R.id.
                    instructions_container, screen1, "screen1").
            addToBackStack(null).
            commit();
然后,您可以抓取它们并根据需要显示/隐藏它们:

/** screen 1 */
public void showInstructions()
{
    // show screen 1
    getFragmentManager().findFragmentByTag("screen1").
            getView().setVisibility(View.VISIBLE);
}
在我的项目中,我们使用一个全局枚举来检查哪个片段当前处于运行状态,因此我们不必依赖堆栈,因为堆栈已经不止一次地被证明是不可靠的


onBack
调用一个开关,该开关检查此枚举并相应地执行操作。对于您的用例,您可以跟踪何时调用此通知,因此它将从片段B转到片段A。

只需进行两个事务,然后提交。@toshkinl是的,我尝试过,但它创建了一个看起来很奇怪的动画。我有点想像它说的那样做,除了片段。你可以随时删除动画。FragmentTransaction ft=getSupportFragmentManager().beginTransaction();ft.setCustomAnimations(0,0)@toshkinl我不能用它来启动片段,不显示它会导致一些问题。相反,我使用了西皮提到的方法。实际的交易不是问题。当我打开它并发出通知时,我需要能够按back键转到另一个
片段
。我想我省略了我的示例代码的一个重要部分:在我的项目中,我们使用全局枚举来检查哪个片段当前处于运行状态,因此我们不必依赖堆栈,堆栈已经不止一次地被证明是不可靠的。onBack只调用一个开关,该开关检查此枚举并相应地执行操作。对于您的用例,您可以只跟踪何时调用了此通知,因此它将从片段B转到片段A。这有意义吗?谢谢,这似乎是我所需要的,它并不理想,但可以工作。你能更新你的答案吗?这样我就可以把它标记为正确的。