向上导航和 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 堆栈中移除。
我有一个 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 堆栈中移除。