【发布时间】:2010-04-07 11:16:26
【问题描述】:
我知道我可以重写 onKeyDown 方法,但我希望 Back 做这件事,只需两次!
【问题讨论】:
-
有一个Android Devlopers' blog post 关于使用返回键。只需将其设置为返回到您想要的任何活动。
我知道我可以重写 onKeyDown 方法,但我希望 Back 做这件事,只需两次!
【问题讨论】:
FirstActivity
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
第二活动
int REQUEST_CODE = 123
Intent intent = new Intent(SecondActivity.this, ThirdActivity.class);
startActivityForResult(intent, REQUEST_CODE);
(为了使这个教学法有更多的代码,下面这个活动)
第三活动
@Override
public void onBackPressed() {
// Semi ugly way of supporting that back button takes us back two activites instead of the usual one.
setResultOkSoSecondActivityWontBeShown();
finish();
}
private void setResultOkSoSecondActivityWontBeShown() {
Intent intent = new Intent();
if (getParent() == null) {
setResult(Activity.RESULT_OK, intent);
} else {
getParent().setResult(Activity.RESULT_OK, intent);
}
}
SecondActivity(再次)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 123) {
if (resultCode == RESULT_OK) {
finish();
}
}
}
【讨论】:
我是这样想的:
A -> B -> C
A、B、C 活动。
因为第一个onKeyDown() 将在 C 中执行,第二个应该在 B 中执行,所以您不能执行两次返回。
我不知道你为什么要这样做,但这里有一些选择。
也许您的 C 活动正在做一些不需要视图的事情,这就是您想要返回两次的原因。
使用意图。比如:
Intent intent = new Intent(C.this, A.class);
startActivity(intent);
使用finishActivityFromChild()。我从未尝试过,但看起来您可以使用它来决定 B 上的操作,具体取决于 C 的结束方式。
【讨论】:
|*| 返回一屏或结束活动:
finish();
|*| 返回多个屏幕:
您可以使用意图返回到您需要的任何屏幕,并使用标志来防止返回到同一屏幕:
Intent gotoScreenVar = new Intent(goFromScreenCls.this, goToScreenCls.class);
gotoScreenVar.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(gotoScreenVar);
【讨论】: