向上导航和singleTop启动模式

时间:2016-03-29 20:07:01

标签: android android-activity launchmode up-navigation

我有一个活动A,当我按下一个工具栏项时,它会使用startActivity(intent)启动活动B.每当我按下后退按钮或向上导航图标时,它就会关闭我的应用程序。我相信这是因为我在父活动中使用了launchMode =“singleTop”(我使用的是因为我有一个搜索视图和一个可搜索的配置,因为我不想在搜索时启动另一个活动实例)。所以问题是:如何在不关闭我的应用的情况下使用向上导航和后退按钮从儿童活动(B)回到父活动(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" />

以下是开始我的新活动的方法:

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;
        }

2 个答案:

答案 0 :(得分:2)

Single Top表示如果您启动已经位于顶部的活动,则不会再次创建该活动。

您的后退导航关闭应用的原因是您刚开始新活动后正在呼叫finish()。这意味着您不再需要该活动,因此将其从堆栈中删除。如果你回到activityB,应用程序将关闭,因为没有什么可以回去(你叫finish()还记得吗?

答案 1 :(得分:2)

我可能只是在寻找最简单的答案,但我认为主要问题是你在开始新活动后正在调用完成。这将调用destroy调用活动并将其从活动堆栈中删除。