活动流程A-> B-> C-> A在android中

时间:2013-04-22 03:45:33

标签: android android-intent navigation

假设我有3项活动:A,B和C.

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

我想要的流程如下:

  • A触发B收集信息。
  • 当B结束时,C将获取信息并显示。
  • A-> B-> C-> A
  • 当C结束时,应该回到A.(这绝不是问题,因为我会B:完成())

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

  1. A触发B收集信息。 (startActivityAsResult)
  2. B将结果传递给A,B:finish()。 (onActivityResult)
  3. 然后A触发C显示。 (startActivity)
  4. 我的第二次尝试:(成功但我认为尽管如此,还有更好的方法吗?)

    1. A触发B收集信息。 (startActivity)
    2. B触发C,而B:finish()。 (startActivity)

    3. 问题:

      是否有任何替代方式(更简单/更直接)定义导航流的序列,就像taskBuilder使用nextIntent() API一样?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

在后退按钮上的活动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

在您的活动后台堆叠中,您将在顶部,下一个B和下一个A。

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