1

假设我有 3 个活动:A、B 和 C。

  • A:家庭活动
  • B:信息收集活动
  • C:信息展示Activity

我想要的流程如下:

  • A 触发 B 收集信息。
  • 当B结束时,C会得到信息并显示。
  • A->B->C->A。
  • 当 C 结束时,它应该回到 A。(这从来都不是问题,因为我会 B:finish())

我的第一次尝试:(失败,因为我不想在 B 之后看到 A,即使是几毫秒)

  1. A 触发 B 收集信息。(startActivityAsResult)
  2. B 将结果传递给 A 和 B : finish()。(onActivityResult)
  3. 然后A触发C显示。(开始活动)

我的第二次尝试:(成功但我在想有没有更好的方法尽管如此?)

  1. A 触发 B 收集信息。(开始活动)
  2. B 触发 C 和 B : finish()。(开始活动)

问题:

有没有其他方法(更简单/直接)来定义导航流程的顺序,就像我在 API 中看到taskBuildernextIntent()那样?

4

2 回答 2

2

在后退按钮上的 Activity C 中,按清除 backstack 并导航到 A

 @Override 
 public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
    onBackPressed();

}

return super.onKeyDown(keyCode, event);
   }

    public void onBackPressed() {
Intent myIntent = new Intent(C.this,A.class);
myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);// clear the backstack
startActivity(myIntent);
finish();
return;
   }

A到B到C

在您的活动返回堆栈中,您将在顶部有 C,下一个 B 和下一个 A。

当您按下 C 中的后退按钮时,活动 C 从堆栈中弹出、销毁,并且前一个活动 B 获得焦点。因此,如果您希望从 C 导航到 A,请清除返回堆栈,导航到 A 并完成当前活动。

于 2013-04-22T04:25:34.833 回答
2

如果我理解正确,您只是想让用户无法使用后退按钮进入已经“用完”的活动,是吗?尝试使用以下内容修改 AndroidManifest.xml 中的活动标签:

<activity
    android:name="yourpackagename.yourappname.YourActivity"
    android:label="@string/your_app_title"
    android:noHistory="true" >

添加noHistory属性后,相关活动将从活动历史记录中删除,并且您将能够强制用户仅按照您的意图描述前进。

于 2013-04-22T03:56:17.977 回答