Android 任务和返回堆栈。管理历史
Android task and back stack. Managing the history
正在尝试管理 android 应用程序中的任务和返回堆栈。
我在其中使用了一个滑动菜单,我可以从中开始不同的活动:Activity1、Activity2...(每个 activity 中的菜单都相似)。
MainActivity 是一个启动器。
我可以在这些活动之间导航,当我按下后退按钮时,我必须始终返回到 MainActivity。
这就是为什么我从没有历史记录的菜单开始活动的原因:
Intent i1 = new Intent(getApplicationContext(), Activity1.class);
i1.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i1);
问题是从 Activity1 我也可以开始一个我必须保留历史的意图:
Intent callIntent = new Intent(Intent.ACTION_DIAL);
callIntent.setData(Uri.parse("tel:1234567890"));
startActivity(callIntent);
拨号后我想回到 Activity1,但是正如你现在看到的,我要回到 MainActivity(因为没有历史记录)。
我也试着用历史开始新的活动并完成之前的Activity:
Intent i1 = new Intent(getApplicationContext(), Activity1.class);
finish();
startActivity(i1);
此处使用拨号意图一切正常(我不会在拨号前完成 Activity1),但每当我按下后退按钮时,我都会退出应用程序。
试图在图片上展示想法
也尝试在清单中使用 noHistory,但没有成功。
我可以在开始 activity 的拨号意图之前 return 中的历史记录(带有 wlags 或 extras),这是没有历史记录的吗?
如何解决?
如果您的 App Map 不会更改,您可以在清单中为每个 Activity 设置 Parent Activity 属性。
例如
对于 Activity 1/2/3 - 父项将是您的 MainActivity。
您可以通过将清单中的 activity 项更改为
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.MainActivity" />
另一种方法是覆盖活动 class 中行为不同的 "onBackPressed" 方法
应用程序退出,因为您在转到 Activity1 时完成了 MainActivity
所以要解决它:你可以在启动 Activity1 时删除 finish()
,
或者在单击 Activity1 中的后退按钮时重新启动 MainActivity
通过将此代码添加到您的 Activity1
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}
正在尝试管理 android 应用程序中的任务和返回堆栈。
我在其中使用了一个滑动菜单,我可以从中开始不同的活动:Activity1、Activity2...(每个 activity 中的菜单都相似)。
MainActivity 是一个启动器。
我可以在这些活动之间导航,当我按下后退按钮时,我必须始终返回到 MainActivity。
这就是为什么我从没有历史记录的菜单开始活动的原因:
Intent i1 = new Intent(getApplicationContext(), Activity1.class);
i1.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i1);
问题是从 Activity1 我也可以开始一个我必须保留历史的意图:
Intent callIntent = new Intent(Intent.ACTION_DIAL);
callIntent.setData(Uri.parse("tel:1234567890"));
startActivity(callIntent);
拨号后我想回到 Activity1,但是正如你现在看到的,我要回到 MainActivity(因为没有历史记录)。
我也试着用历史开始新的活动并完成之前的Activity:
Intent i1 = new Intent(getApplicationContext(), Activity1.class);
finish();
startActivity(i1);
此处使用拨号意图一切正常(我不会在拨号前完成 Activity1),但每当我按下后退按钮时,我都会退出应用程序。
试图在图片上展示想法
也尝试在清单中使用 noHistory,但没有成功。
我可以在开始 activity 的拨号意图之前 return 中的历史记录(带有 wlags 或 extras),这是没有历史记录的吗?
如何解决?
如果您的 App Map 不会更改,您可以在清单中为每个 Activity 设置 Parent Activity 属性。
例如
对于 Activity 1/2/3 - 父项将是您的 MainActivity。
您可以通过将清单中的 activity 项更改为
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.MainActivity" />
另一种方法是覆盖活动 class 中行为不同的 "onBackPressed" 方法
应用程序退出,因为您在转到 Activity1 时完成了 MainActivity
所以要解决它:你可以在启动 Activity1 时删除 finish()
,
或者在单击 Activity1 中的后退按钮时重新启动 MainActivity
通过将此代码添加到您的 Activity1
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}