首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >片段中的onBackPressed显示活动两次

片段中的onBackPressed显示活动两次
EN

Stack Overflow用户
提问于 2017-07-19 14:10:28
回答 3查看 630关注 0票数 0

我有一个应用程序最小SDK 21,目标25。使用:android.app.DialogFragmentandroid.support.v7.app.AppCompatActivity.

初始Activity是一个启动器,它可以启动3个活动中的1个和1个DialogFragmentDialogFragment可以依次启动Activity (这是3个活动之一)。我遇到的问题只是关于加载DialogFragment和片段,然后加载应用程序,然后返回到启动器。

Fragment立即返回到启动器(不加载Activity)时,这可以正常工作。我可以检测到Fragment是通过启动程序加载的,并且onBackPress()可以正常处理。

但是,当Fragment加载另一个Activity,然后使用onBackPress()返回到Fragment,然后使用onBackPress()返回到启动器时,我遇到了一个问题。目前处理这种情况的方式是,Fragment使用FLAG_ACTIVITY_CLEAR_TASKFLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TOP标志通过Intent加载启动器(这似乎是解决某人类似问题的解决方案)。我已经尝试了这些标志的其他变体,也没有这些标志。对于这种情况,我也尝试在DialogFragment中使用onBackPress(),而不是使用Intent加载Activity,然后应用程序终止,我需要它返回到启动器。

在本例中,使用这些标志,当我返回到启动器时,启动器显示,然后清除,然后重新显示(在另一个onBackPress()上,应用程序随后正确终止)。问题是启动器显示了两次。我假设首先显示的启动器是加载的原始副本,然后被新副本替换。我还没有找到(在这个场景中)加载启动器的原始副本的方法(如果确实是这样的话)。如上所述,这是一个DialogFragment

我如何解决这个问题,使启动器活动在这种情况下不会显示两次?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-19 14:20:54

为什么不在片段中完成活动以返回到launcher活动呢?

如果您确实必须使用intent,请尝试使用Intent.FLAG_ACTIVITY_REORDER_TO_FRONT

票数 0
EN

Stack Overflow用户

发布于 2017-07-19 14:22:21

尝试覆盖onBackPressed()方法,如下所示:

代码语言:javascript
复制
@Override
public void onBackPressed() {
    int count = fragmentManager.getBackStackEntryCount();

    if (count == 1) {
        finish();
    } else {
        fragmentManager.popBackStack();
    }
}
票数 0
EN

Stack Overflow用户

发布于 2017-07-19 17:05:02

代码语言:javascript
复制
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
   getSupportFragmentManager().popBackStackImmediate();
} 
else {
  super.onBackPressed();
}

onBackPressed()方法中使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45182222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档