1

实际上我对android自定义标签有一个直接的问题。但是,我将概括我的问题。假设我有ActivityAActivityBActivityA- 是一个外部的,所以我们从一个 Intent 启动它:

Intent intent = customTabsIntent.intent;
        intent.setData(requestUri);
        intent.putExtra(CustomTabsIntent.EXTRA_TITLE_VISIBILITY_STATE, CustomTabsIntent.NO_TITLE);
        mContext.startActivity(intent);

从这里我们看到ActivityA- 实际上是一个自定义选项卡活动。当事情完成后,我启动ActivityB. 我想ActivityA消除任务历史记录,我可以通过将标志Intent.FLAG_ACTIVITY_NO_HISTORY 应用于我的意图来实现这一点。但是这种方法会引起问题,因为当用户切换到最近的应用程序或转到其他应用程序时 - 会ActivityA永远消失。当然 - 这就是 flag no history 的工作原理。但我想要一个不同的流程,我只想ActivityA在启动时消失ActivityB。任何想法如何实现这一目标?

PS 我需要完成ActivityA,它是通过意图启动的,我无权访问它的代码,也没有能力调用finish().

4

2 回答 2

1

我不认为你可以通过使用 NO_HISTORY 标志来做到这一点,因为ActivityA正在启动并且你无法控制它。

但是,您应该能够实现您的目标(不能通过覆盖 BACK 按钮并让它返回到任务堆栈下方的任何内容来从ActivityB返回到返回。ActivityAActivityBActivityA

假设这ActivityC是开始的ActivityA,你可以在下面做这样的事情ActivityB

@Override
public void onBackPressed() {
    // Direct user back to ActivityC
    Intent intent = new Intent(this, ActivityC.class);
    // Add flags to ensure that we reuse the existing instance of
    //  ActivityC and that we clear any other activities above ActivityC
    //  from the stack.
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
                    Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(intent);
}
于 2017-01-03T12:29:28.557 回答
0

您可以使用finish() 方法清除任何活动。所以在开始另一个activity完成之前。

 Intent intent = customTabsIntent.intent;
            intent.setData(requestUri);
            intent.putExtra(CustomTabsIntent.EXTRA_TITLE_VISIBILITY_STATE, CustomTabsIntent.NO_TITLE);
            mContext.startActivity(intent);
        finish();     //add this to clear that activity
于 2016-12-29T15:31:19.963 回答