活动堆栈问题(Activities Stack Issue)

2019-06-26 05:00发布

我有两套活动假设3个活动各一套,(A1,B1,C1 || A2,B2,C2),我开始我的应用程序从A1然后 - > B1 - 在这里> C1我想从C1跳到 - > A2在A2如果我按回到它应该存在于应用程序,而不是把我带回了C1,然后从A2我浏览到 - > B2 - > C2。

因此,它基本上是我想改变的开始活动,这就像我在一个应用两个应用程序,当我翻到第二应用我要明确活动堆栈。 那可能吗? 有任何想法吗?

Answer 1:

在我看来,你已经回答了你自己的问题。 你写了:

因此,它基本上是我想改变的开始活动,这就像我在一个应用两个应用程序,当我翻到第二应用我要明确活动堆栈。

我会做这种方式:

创建DispatcherActivity这是在应用程序启动时被推出的活动。 这个活动是你的任务的根系活力,负责启动A1或A2因...而不是调用finish()本身(即:它将由A1或A2,但仍然是在活动的根被覆盖堆)。

A1 ,陷阱“返回”键,并告诉DispatcherActivity退出这样的:

@Override
public void onBackPressed() {
    Intent intent = new Intent(this, DispatcherActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.addExtra("exit", "true");
    startActivity(intent);
}

这将清除任务堆栈下降到根系活力( DispatcherActivity ),然后启动DispatcherActivity这个意图一次。

C1 ,推出A2 ,做到以下几点:

Intent intent = new Intent(this, DispatcherActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addExtra("A2", "true");
startActivity(intent);

这将清除任务堆栈下降到根系活力( DispatcherActivity ),然后启动DispatcherActivity这个意图一次。

DispatcherActivityonCreate()您需要确定基于意图的额外内容,这样做的:

Intent intent = getIntent();
if (intent.hasExtra("exit")) {
    // User wants to exit
    finish();
} else if (intent.hasExtra("A2")) {
    // User wants to launch A2
    Intent a2Intent = new Intent(this, A2.class);
    startActivity(a2Intent);
} else {
    // Default behaviour is to launch A1
    Intent a1Intent = new Intent(this, A1.class);
    startActivity(a1Intent);
}

A2 ,陷阱“返回”键,并告诉DispatcherActivity使用的相同的覆盖退出onBackPressed()A1

注:我刚才输入这个代码,所以我没有编译它,它可能不是完美的。 你的旅费可能会改变 ;-)



Answer 2:

您可以检查时被压在活动A2,然后如果它的返回按钮,您可以关闭应用程序的按钮。 您可以使用A2以下方法

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            this.finish();
        }
        return super.onKeyDown(keyCode, event);
    }


Answer 3:

尝试用这种意图开展活动A2 - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);



Answer 4:

处理这种使用onBackPressed和完成方法。

启动其他活动之前,你最好使用面漆()方法关闭当前的活动。

如果你想要去的背压以前的活动,覆盖onBackPressed方法,并调用特定的意图。

在A2的活性,加入onBackPressed方法完成方法(这里不调用之前的活动)。 这是方式之一。



Answer 5:

同时使从意图活动C1至A2用作

Intent intent=new Intent(C1.this,A2.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

和您的活动A2覆盖后退按钮通过

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        A2.this.finish();
    }
    return super.onKeyDown(keyCode, event);
}


Answer 6:

如果要在按关闭您的应用程序返回按钮,而不是回到过去的活动,你应该覆盖的后退按钮。 在覆盖方法调用完成()关闭活动之后方法。 我希望这可以帮助你。

编辑:

检查下面的链接:这是在你看来栈关闭所有活动。 关闭之前您的应用程序关闭所有活动。

http://www.coderzheaven.com/2011/08/27/how-to-close-all-activities-in-your-view-stack-in-android/



Answer 7:

FLAG_ACTIVITY_CLEAR_TOP是不是你在找什么。 我认为你正在寻找:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);


文章来源: Activities Stack Issue