我有一个带导航抽屉的Activity
。我已经使用了片段,当我移动到抽屉中的不同菜单时,我使用addToBackStack()
方法将它们添加到backstack。基本上,Activity
以片段A 开头,然后如果我转到片段B 或片段C ,我可以按回去并返回片段A 。
但是现在我有一个通知应该打开Activity
片段B 打开,当我按回来时它应该带我回到片段A 。有没有办法像startActivities
一样处理这个问题。
以下是Activity
的代码:
@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();
}
答案 0 :(得分:1)
为什么不用标签定义片段并根据需要调用它们?
以下是我如何使用我的片段的示例:
使用Activity
的{{1}}方法启动您的片段,如下所示:
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);
}
调用一个开关,它会检查此枚举并相应地执行操作。对于您的用例,您可以跟踪何时调用此通知,因此它将从片段B转到片段A。