5

我想对主页按钮进行编程,因此它将删除Activities堆栈中的所有内容,除了一个。我在这里做到了:如何完成堆栈上的每个活动,除了 Android 中的第一个活动

public boolean onOptionsItemSelected(MenuItem item) {
    int itemId = item.getItemId();
    switch (itemId) {
    case android.R.id.home:
        Intent intent = new Intent(this, AMainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        startActivity(intent);
        break;
...

但这种方式不适合我,因为它会删除所有Activities(包括第一个)并再次启动第一个。例如 - 如果我在 中检查用户密码onCreate(),他会被再次询问。如何Activities从堆栈中删除所有内容,但不会“触及”第一个?

4

3 回答 3

2

是的,根据以下文档Intent.FLAG_ACTIVITY_CLEAR_TOP

上面示例中当前运行的活动 B 实例将在其 onNewIntent() 方法中接收您在此处启动的新意图,或者自身完成并使用新意图重新启动。如果它已声明其启动模式为“多重”(默认)并且您没有在同一意图中设置 FLAG_ACTIVITY_SINGLE_TOP,那么它将完成并重新创建;对于所有其他启动模式,或者如果设置了 FLAG_ACTIVITY_SINGLE_TOP,则此 Intent 将被传递到当前实例的 onNewIntent()。

因此,使用附加Intent标志:

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

并且您的活动不应该被重新创建。相反,它只会通过对onNewIntent().

于 2013-02-07T18:17:35.240 回答
2

在 manifest.xml 中将以下属性添加到 AMainActivity 的 Activity 标记中。

android:launchMode="singleTop"
于 2013-02-07T18:21:23.817 回答
0

您可以ExcludeFromRecent = "true"在清单中的活动声明中使用标志,您不想在堆栈中。

于 2013-02-07T18:13:04.953 回答