FLAG_ACTIVITY_NO_HISTORY意图指向外部活动不起作用。这可能吗?

时间:2016-12-02 19:23:47

标签: android

我需要向用户提供有关如何更改某些设置的一些说明。为此,我启动了一个启动设置操作的意图,而不是启动一个活动,用一些透明度和说明覆盖它。

在代码中,它转换为:

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时,我希望用户在按下后退按钮时返回到来电者活动,如图所示:

enter image description here

可悲的是,我无法使用活动上的标记来实现此行为。我尝试了所有我能想到的组合: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”,我真的认为有一个更优雅的解决方案。有人能指出我实现这种行为的正确方法吗?

0 个答案:

没有答案