我怎样才能制作这样的活动行为

时间:2013-04-12 09:28:43

标签: android android-activity

HI DEVELOPERS

问题:

我的应用中有5个活动; 我想让它们成为这样的行为:

enter image description here

我尝试了什么:

A - > C(创建新的)

Intent intent = new Intent(getApplicationContext(),
C.class);
startActivity(intent);

A - > B(创建新的)

Intent intent = new Intent(getApplicationContext(),
B.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

B - > C(创建新的)

Intent intent = new Intent(getApplicationContext(),
C.class);
startActivity(intent);

C - > D(我想在堆栈中使用现有的

Intent intent = new Intent(getApplicationContext(),
D.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

C - > E(我想在堆栈中使用现有的

Intent intent = new Intent(getApplicationContext(), E.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

D - > C(我想在堆栈中使用现有的

@Override
public void onBackPressed() {
    Intent i = new Intent(getApplicationContext(), C.class);
    i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    this.overridePendingTransition(R.anim.right_to_left_a,
    R.anim.right_to_left_b);
    startActivity(i);
}

E - > C(我想在堆栈中使用现有的

@Override
public void onBackPressed() {
    Intent i = new Intent(getApplicationContext(), C.class);
    i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    this.overridePendingTransition(R.anim.right_to_left_a,
    R.anim.right_to_left_b);
    startActivity(i);
}

这不起作用,因为堆栈中的活动排列不正确。

问题是当我按下后退键时,我不知道如何从C转到B或A,现在当我在C中按回键时,它会转到D或E!

这是我想要的确切内容:

A->B when a button pressed,create new B
B->A when back key pressed,finish B
A->C when a button pressed,create new C
C->A when back key pressed,finish C
B->C when a button pressed,create new C
C->B when back key pressed,finish C

C->E when a button pressed,create new E if not exist otherwise use existing one
E->C when back key pressed,use existing one
C->D when a button pressed,create new D if not exist otherwise use existing one
D->C when back key pressed,use existing one

3 个答案:

答案 0 :(得分:0)

你应该试试public void startActivityForResult (Intent intent, int requestCode) 查看此http://developer.android.com/reference/android/app/Activity.html#startActivityForResult(android.content.Intent,int)

答案 1 :(得分:0)

A到B到C.在C中你按下后退按钮默认会通过调用finish()来转到B.活动C从堆栈弹出被破坏。堆栈中的先前活动是B,它需要关注。这是默认功能。

由于您询问了如何清除Backstack,您可以使用以下

在活动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 back stack
startActivity(myIntent);
finish();
return;
    }

答案 2 :(得分:0)

我对你的考试很困惑,但我认为问题出在你Override onBackPressed()

的路上

当您覆盖没有super.onBackPressed();this.finish();的onBackPressed时,您实际上不允许本机系统操作从堆栈中删除当前活动。

因此,孔应用中的后退按钮之间存在不一致。在活动A,B,C按预期工作,而在D,E,后退按钮创建新活动而不破坏现有活动。因此,如果我没有弄错,用户会被困在您的应用中!?

要编辑代码,我可以快速修复:

D - > C(我想在堆栈中使用现有的)

@Override
public void onBackPressed() {
    Intent i = new Intent(getApplicationContext(), C.class);
    i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    this.overridePendingTransition(R.anim.right_to_left_a,
    R.anim.right_to_left_b);
    startActivity(i);
    finish();
}

E - > C(我想在堆栈中使用现有的)

@Override
public void onBackPressed() {
    Intent i = new Intent(getApplicationContext(), C.class);
    i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    this.overridePendingTransition(R.anim.right_to_left_a,
    R.anim.right_to_left_b);
    startActivity(i);
    finish();
}