简体   繁体   English

如何在片段和活动中使用onBackPressed()?

[英]How to use onBackPressed() in Fragment and Activity?

I'm creating LoginActivity-> OtherActivity-> Fragment 1-> Fragment_2. 我正在创建LoginActivity-> OtherActivity->片段1-> Fragment_2。 When I click Back Button I'm back in Fragment_1 when again I click BackButton I'm in LoginActivity why? 当我单击“后退按钮”时,我又回到Fragment_1中,当我再次单击“后退按钮”时,我在LoginActivity中,为什么?

I want come back to MainActivity after the click BackButton in Fragment _1 and after next click BackButton (in MainActivity) I want come back to home screen 我想在片段_1中单击BackButton之后返回MainActivity,然后在MainActivity中再次单击BackButton之后返回主屏幕。

How can I do this ? 我怎样才能做到这一点 ?

In MainActivity i have: 在MainActivity中,我有:

@Override
    public void onBackPressed() {

        if (getFragmentManager().getBackStackEntryCount() > 0 ) {
            getFragmentManager().popBackStack();
        } else {
            super.onBackPressed();
        }
    }

Call addToBackStack when adding fragment. 添加片段时调用addToBackStack For example: 例如:

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.container, fragment);
ft.addToBackStack(backStateName);
ft.commit();

Also, call finish() on your LoginActivity before starting OtherActivity. 另外,在启动OtherActivity之前,请在LoginActivity上调用finish()

At first remove LoginActivity from stack when navigating to OtherActivity. 首先,导航到OtherActivity时从堆栈中删除LoginActivity。 After that use @ahomphophone's answer when presenting fragment. 之后,在呈现片段时使用@ahomphophone的答案。 After that back stack should work as expected without needing override 'onBackPressed'. 之后,后向堆栈应按预期工作,而无需覆盖'onBackPressed'。

Note: There is no MainActivity on your provided stack. 注意:提供的堆栈上没有MainActivity。

Update: If you want to stay in OtherActivity use this code 更新:如果您想停留在OtherActivity中,请使用此代码

@Override
public void onBackPressed() {

    if (getFragmentManager().getBackStackEntryCount() > 0 ) {
        getFragmentManager().popBackStack();
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM