向上导航和 singleTop 启动模式

Up Navigation and singleTop launch mode

我有一个 activity A,当我按下工具栏项时,它会使用 startActivity(intent) 启动 activity B。每当我按下后退按钮或向上导航图标时,它都会关闭我的应用程序。我相信这是因为我在我的 parent activity 中使用了 launchMode="singleTop" (我使用它是因为我有一个搜索视图和一个可搜索的配置,因为我不想要启动我的 activity 的另一个实例进行搜索)。所以问题是:如何在不关闭我的应用程序的情况下使用向上导航和后退按钮从 child activity(B) 返回到 parent activity(A)?我搜索了一下,发现了一些关于 onNewIntent() 的信息。如果这是我的解决方案,我应该如何正确使用它?


这是我的清单文件:

        <activity
            android:name="com.example.fernando.inspectionrover.MainActivity"
            android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.intent.action.SEARCH" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable" />
        </activity>
        <activity
            android:name="com.example.fernando.inspectionrover.BluetoothSettingsActivity"
            android:parentActivityName="com.example.fernando.inspectionrover.MainActivity"
            android:screenOrientation="landscape">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.example.fernando.inspectionrover.MainActivity" />

这是开始我的新 activity 的方法:

switch (id) {
            case R.id.bluetoothActivity:
                Intent switchActivity = new Intent(this, BluetoothSettingsActivity.class);
                startActivity(switchActivity);
                Log.i(LIFE_CYCLE, "Switching from " + getLocalClassName() + " to Bluetooth Setting Activity");
                finish();
                break;
        }

Single Top 意味着如果您启动一个已经在顶部的 activity,它将不会再次创建,只是恢复。

您的后退导航关闭应用程序的原因是因为您在开始新的 activity 后立即调用 finish()。这意味着您不再需要 activity,因此它已从堆栈中移除。如果您在 activityB 上返回,应用程序将关闭,因为没有什么可返回的(您调用了 finish() 还记得吗?

我可能只是在寻找最简单的答案,但我认为主要问题是您在启动新 activity 后调用 finish。这会调用销毁调用 activity 并将其从 activity 堆栈中移除。