我正在编写一个有两种“模式”的应用程序;一种查看 模式和一种编辑 模式。该应用程序公开了两个主要/启动器 Activity (例如,A 和 D),这两个 Activity 又具有自己的 Activity 链(B、 C 和 E,分别为 F)。两个入口点 Activity A 和 D 将在主屏幕中显示两个带有单独标签的图标,并且这两条链永远不会交叉,即一旦您在 View 中启动应用程序模式与 Activity A,你唯一可以来回走的路线是A、B、C,如果您使用 Activity D 在编辑模式下启动应用程序,唯一可用的 Activity 链是 D、E、F .
现在,我的问题是如果启动应用程序,例如查看模式( Activity 链 A、B、C),然后从该链中的任何 Activity 中按主页按钮我回到主屏幕(当然)但如果我随后在编辑模式下重新启动应用程序( Activity 链 D、E、F),我会到达按下主页按钮时我所在的 Activity (即错误链中的 Activity ) - 不是编辑模式的预期入口点; Activity D。
我该如何解决这个问题?
我已针对相关 Activity 尝试了 android:noHistory
、android:clearTaskOnLaunch
和 AndroidManifest.xml
中其他属性的各种组合。但它们似乎只影响 Activity 本身,而不是整个链条。
我想删除整个 Activity 链(A、B、C 或 D, E, F) 从 history stack 当 Home 按钮被按下时,但仍然保持堆栈完好无损,而我仍然在链中(我希望能够按下例如,从 Activity B 返回按钮并转到 Activity A)。
最佳答案
听起来您需要在家庭 Activity 中使用 Intent.FLAG_ACTIVITY_CLEAR_TOP
标志,但您当然不能在 AndroidManifest.xml 文件中添加这些标志。也许你应该有一个单一的入口点,然后启动正确的 Activity
- 你可以使用 activity-alias使它看起来像用户的两个入口点。
例如 - 您在 list 文件中定义 Activity :
<activity-alias
android:label="@string/edit_app_name"
android:name="launch_edit"
android:targetActivity=".activities.LaunchActivity">
<meta-data android:name="launch_type" android:resource="@string/launch_edit" />
</activity-alias>
<activity-alias
android:label="@string/view_app_name"
android:name="launch_view"
android:targetActivity=".activities.LaunchActivity">
<meta-data android:name="launch_type" android:resource="@string/launch_view" />
</activity-alias>
然后在您的 LaunchActivity 中您有:
ActivityInfo activityInfo = getPackageManager().getPackageInfo( this.getComponentName(), PackageManager.GET_ACTIVITIES|PackageManager.GET_META_DATA);
int launchTypeResource = activityInfo.metaData.getInt("launch_type");
String launchType = context.getString(launchTypeResource);
if(launchType == null) {
// handle error
throw new Exception();
}
Intent newIntent;
if(launchType.equals(context.getString(R.string.launch_view)) {
newIntent = createIntent(ViewActivity.class);
} else if(launchType.equals(context.getString(R.string.launch_edit)) {
newIntent = createIntent(EditActivity.class);
}
newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(newIntent);
关于android - 按下主页按钮时如何清除 Activity 历史堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8757754/