1

嗨开发人员

问题:

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

在此处输入图像描述

我尝试了什么:

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
4

3 回答 3

0

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

于 2013-04-12T09:40:45.850 回答
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;
    }
于 2013-04-12T09:48:43.997 回答
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();
}
于 2013-04-12T09:49:03.757 回答