我有一个应用程序最小SDK 21,目标25。使用:android.app.DialogFragment和android.support.v7.app.AppCompatActivity.
初始Activity是一个启动器,它可以启动3个活动中的1个和1个DialogFragment。DialogFragment可以依次启动Activity (这是3个活动之一)。我遇到的问题只是关于加载DialogFragment和片段,然后加载应用程序,然后返回到启动器。
当Fragment立即返回到启动器(不加载Activity)时,这可以正常工作。我可以检测到Fragment是通过启动程序加载的,并且onBackPress()可以正常处理。
但是,当Fragment加载另一个Activity,然后使用onBackPress()返回到Fragment,然后使用onBackPress()返回到启动器时,我遇到了一个问题。目前处理这种情况的方式是,Fragment使用FLAG_ACTIVITY_CLEAR_TASK、FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_CLEAR_TOP标志通过Intent加载启动器(这似乎是解决某人类似问题的解决方案)。我已经尝试了这些标志的其他变体,也没有这些标志。对于这种情况,我也尝试在DialogFragment中使用onBackPress(),而不是使用Intent加载Activity,然后应用程序终止,我需要它返回到启动器。
在本例中,使用这些标志,当我返回到启动器时,启动器显示,然后清除,然后重新显示(在另一个onBackPress()上,应用程序随后正确终止)。问题是启动器显示了两次。我假设首先显示的启动器是加载的原始副本,然后被新副本替换。我还没有找到(在这个场景中)加载启动器的原始副本的方法(如果确实是这样的话)。如上所述,这是一个DialogFragment。
我如何解决这个问题,使启动器活动在这种情况下不会显示两次?
发布于 2017-07-19 14:20:54
为什么不在片段中完成活动以返回到launcher活动呢?
如果您确实必须使用intent,请尝试使用Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
发布于 2017-07-19 14:22:21
尝试覆盖onBackPressed()方法,如下所示:
@Override
public void onBackPressed() {
int count = fragmentManager.getBackStackEntryCount();
if (count == 1) {
finish();
} else {
fragmentManager.popBackStack();
}
}发布于 2017-07-19 17:05:02
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStackImmediate();
}
else {
super.onBackPressed();
}在onBackPressed()方法中使用它。
https://stackoverflow.com/questions/45182222
复制相似问题