我需要向用户提供有关如何更改某些设置的一些说明。为此,我启动了一个启动设置操作的意图,而不是启动一个活动,用一些透明度和说明覆盖它。
在代码中,它转换为:
startActivity(new Intent("settingsName").addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY));
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent overlayIntent = new Intent(callerActivity, SettingsOverlayActivity.class));
callerActivity.startActivity(overlayIntent);
}
}, 500);
添加FLAG_ACTIVITY_NO_HISTORY时,我希望用户在按下后退按钮时返回到来电者活动,如图所示:
可悲的是,我无法使用活动上的标记来实现此行为。我尝试了所有我能想到的组合:FLAG_ACTIVITY_CLEAR_TASK,FLAG_ACTIVITY_NEW_TASK和其他一些组合,但没有成功。当按下覆盖图上的后退按钮时,我总是被重定向到“设置”屏幕。
我的解决方法是将BaseActivity.class作为参数发送到OverlayActivity,并覆盖onBackPressed以重新排序BaseActivity到前面。翻译代码:
@Override
public void onBackPressed() {
Class callerActivity = (Class) getIntent().getExtras().get(OVERLAY_CALLER_ACTIVITY_KEY);
if(callerActivity != null) {
startActivity(new Intent(this, callerActivity).addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT));
return;
}
super.onBackPressed();
}
请忽略空检查,检查活动完整性等,我试图尽可能减少代码。
关键是:我的解决方法看起来很多“hack”,我真的认为有一个更优雅的解决方案。有人能指出我实现这种行为的正确方法吗?