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。这有意义吗?谢谢,这似乎是我所需要的,它并不理想,但可以工作。你能更新你的答案吗?这样我就可以把它标记为正确的。