离开活动时删除最后一个片段

时间:2016-02-23 20:21:44

标签: android fragment

我有这种情况:在活动A中,它按此顺序导航:片段F1 - >片段F2,然后,点击F2中的一个按钮,它启动了另一个活动B.

现在我想要实现的目标:在活动B中点击设备中的“后退”按钮时,我想在活动A中返回F1。

请注意,这涉及2项活动,而不是同一项活动。我想在离开活动A时弹出最后一个片段F2但是我无法弄清楚如何做到这一点。我尝试在活动A的onSaveInstanceState(Bundle outState)中添加这些:

fragmentManager.popBackStackImmediate();

但它似乎根本不起作用。

2 个答案:

答案 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);

}