【问题标题】:Activity Flows A->B->C->A in androidandroid中的活动流程A->B->C->A
【发布时间】:2013-04-22 03:45:32
【问题描述】:

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

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

我想要的流程如下:

  • 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()。 (开始活动)

问题:

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

【问题讨论】:

  • 我认为你的第二次尝试比第一次更好。我觉得这是更好的方法。
  • 我认为会有一个现成且更简单的 API 来计算流程 :)
  • 恕我直言,您的第二次尝试似乎是可行的方法。它也更容易、更清洁、更简单!
  • I thought there would be a ready and simpler API for working out the flows。有。你刚刚用过! ;)

标签: android android-intent navigation


【解决方案1】:

在 Activity C 中按返回按钮清除后台堆栈并导航到 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 并完成当前活动。

【讨论】:

  • Hii @RaghuNandan 我也可以在从 B 触发 C 时调用 Finish() 方法。所以我不需要 Intent。
  • 是的,你可以做到。但是你说你需要一个替代品,所以我提供了一个。
  • @Raghunandan 实际上我是在问是否有替代流程的方法,例如让 taskBuilder 指定活动顺序:) 不是出于意图。
  • 您需要决定活动的顺序。 A 到 B 到 C 或 A 到 C。这取决于您如何设计应用程序。
【解决方案2】:

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

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

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

【讨论】:

  • 不,我不是这个意思 :) 用户可以随时返回。如果B成功收集信息,那么它应该流向C。但是如果B没有收集信息,A是它唯一的流,而不是C。
  • 好吧,至少我从你那里学到了一些东西,你有功劳:) +1
  • 很高兴我无法理解英语产生了有用的结果。 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
  • 2021-10-04
相关资源
最近更新 更多