首页 > 解决方案 > Android:如何切换到已经创建的Activity

问题描述

我是 Android 编程新手。我想要做的是切换到另一个已经创建的活动。假设我启动了 Activity B 并从 Activity A 移动到 Activity B,然后我按下返回按钮并返回到 Activity A。现在我想在倒计时完成后切换到 Activity B。

ActivityA.java

  private void startTimer() {
        ...
        @Override
        public void onFinish() {
            // force the user to move on to Activity B
            // if the user haven't started Activity B, just start it
            if (!mHasActivityBStarted) {
                Intent intent =
                        new Intent(ActivityA.this, ActivityB.class);
                startActivity(intent);
            } else {
                // how can I switch to ActivityB that has been created?
            }
        }
    }.start();
}

我该怎么做?

标签: androidandroid-intent

解决方案


来自Android 开发者文档

FLAG_ACTIVITY_REORDER_TO_FRONT

public static final int FLAG_ACTIVITY_REORDER_TO_FRONT

如果在传递给 Context.startActivity() 的 Intent 中设置,则此标志将导致已启动的活动被带到其任务历史堆栈的前面(如果它已经在运行)。

例如,考虑一个由四个活动组成的任务:A、B、C、D。如果 D 调用 startActivity() 的 Intent 解析为活动 B 的组件,则 B 将被带到历史堆栈的前面,结果顺序为:A、C、D、B。如果还指定了 FLAG_ACTIVITY_CLEAR_TOP,则此标志将被忽略。

在您的情况下,您可以在完成或重新创建它们之间ActivityA进行切换。ActivityB

把它放在一起。

活动A

// Call this method when users press a button on ActivityA to go to ActivityB.
public void goToActivityB(View view) {
    Intent intent = new Intent(this, ActivityB.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    startActivity(intent);
}

// When users press a button from ActivityB, ActivityA will be bring to front and this method will be called by Android.
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    // Write your logic code here
}

活动B

// Call this method when users press on a button in ActivityB
public void backToActivityA(View view) {
    Intent intent = new Intent(this, ActivityA.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    startActivity(intent);
}

// When users press a button from ActivityA, ActivityB will be bring to front and this method will be called by Android.
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    // Write your logic code here
}

推荐阅读