gpt4 book ai didi

android - 完成 MainActivity 和新 Activity 之间的所有 Activity

转载 作者:行者123 更新时间:2023-11-30 00:53:30 26 4
gpt4 key购买 nike

我正在制作一个具有 MainActivity (A) 的应用程序,它是一个导航 Activity 。该 Activity 可以启动 Activity (B),然后我可以从那里导航到 Activity (C)。然后,当我导航到 Activity (D) 时,我想完成它之前的所有 Activity ,但 MainActivity (A) 除外。所以基本上,如果我从 Activity (A) 返回,我将转到相同的 Activity 实例 (A)。

所以本质上是 A>B>C,然后当 (D) 启动时,堆栈是 A>D。

最佳答案

两种选择:

1) 使用 MainActivity 作为“调度程序”。当 C 要启动 D 时,它应该这样做:

Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("launchD", true);
startActivity(intent);

此代码将清除 MainActivity 之上的所有 Activity ,并导致 onNewIntent()MainActivity 上被调用。

MainActivity中,覆盖onNewIntent():

@Override
protected void onNewIntent(Intent intent) {
if (intent.hasExtra("launchD")) {
// Need to launch Activity D
Intent launchIntent = new Intent(this, D.class);
startActivity(launchIntent);
}
}

MainActivity 现在将在清除堆栈后启动 D。在 D 中按 BACK 将返回到 MainActivity

2) 像往常一样从 C 启动 D:

Intent intent = new Intent(this, D.class);
startActivity(intent);

此时栈为A->B->C->D

在 D 中,覆盖 onBackPressed():

@Override
public void onBackPressed() {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
}

在这种情况下,在 D 中按 BACK 将导致 D、C 和 B 从堆栈中移除,用户将返回到 MainActivity

注意:结合使用标志 FLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_SINGLE_TOP 可确保重用 MainActivity 的现有实例。 Android 不会创建新实例。

关于android - 完成 MainActivity 和新 Activity 之间的所有 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40567659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com