我有这种情况:在活动A中,它按此顺序导航:片段F1 - >片段F2,然后,点击F2中的一个按钮,它启动了另一个活动B.
现在我想要实现的目标:在活动B中点击设备中的“后退”按钮时,我想在活动A中返回F1。
请注意,这涉及2项活动,而不是同一项活动。我想在离开活动A时弹出最后一个片段F2但是我无法弄清楚如何做到这一点。我尝试在活动A的onSaveInstanceState(Bundle outState)
中添加这些:
fragmentManager.popBackStackImmediate();
但它似乎根本不起作用。
答案 0 :(得分:0)
这是一种更优雅的方式......
我忘记了onStart()......它是在首次启动活动时调用的。为了避免在首次打开应用程序时弹出片段,将在if语句中应用多态检查
public class MainActivity extends AppCompatActivity {
private FrameLayout contentFrame;
private FragmentManager fm;
private Button nextButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contentFrame = (FrameLayout) findViewById(R.id.content_frame);
fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.content_frame, new F1()).commit();
nextButton = (Button) findViewById(R.id.next);
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(fm.findFragmentById(R.id.content_frame).getClass() == F1.class) {
FragmentTransaction ft = fm.beginTransaction();
ft.addToBackStack("F2");
ft.add(R.id.content_frame, new F2());
ft.commit();
} else {
startActivity(new Intent(MainActivity.this, ActivityTwo.class));
}
}
});
}
@Override
protected void onStart() {
super.onStart();
if(fm.findFragmentById(R.id.content_frame).getClass() == F2.class) {
fm.popBackStackImmediate("F2", FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
}
}
祝你好运。代码已经过测试工作。
答案 1 :(得分:0)
感谢this post,我能够得到我想要的东西:在活动A:
@Override
protected void onSaveInstanceState(Bundle outState)
{
FragmentManager manager = getSupportFragmentManager();
FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0);
manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
super.onSaveInstanceState(outState);
}