【发布时间】:2011-03-23 14:40:14
【问题描述】:
我的应用程序有三个活动,A、B 和 C。我通过 OK 按钮从 A 移动到 B,我想使用 Android 设备的默认后退按钮从 B 移动到 A。但是,当我按下按钮时,整个应用程序都会关闭。我该如何解决这个问题?
【问题讨论】:
-
显示您运行的代码,然后单击按钮。你如何从 A 开始 B?
-
如果答案不能帮助您停止默默地反对它。请发表评论。
我的应用程序有三个活动,A、B 和 C。我通过 OK 按钮从 A 移动到 B,我想使用 Android 设备的默认后退按钮从 B 移动到 A。但是,当我按下按钮时,整个应用程序都会关闭。我该如何解决这个问题?
【问题讨论】:
我怀疑您在 OK 按钮 onclick 侦听器中调用 finish()。不要那样做。 finish() 从活动堆栈中删除您的活动。
阅读更多here。
【讨论】:
为什么要开始活动以获得结果?当您按下后退按钮时,结果会从 B 活动设置为 RESULT_CANCELED,因此如果您不处理结果代码,它会崩溃...
你可以这样处理背压
private static final int NONE = -1;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
setResult(NONE, intent);
finish();
return super.onKeyDown(keyCode, event);
}
【讨论】:
当你确定按钮时,你开始一个意图......就像
Intent int=新意图(context,B.class); startActivity(int);
如果你不处理后退按钮。
如果使用默认的后退按钮...它将返回到 A。
希望对你有帮助...
【讨论】:
在我的 onClick 方法(在主活动中)我使用代码:
Intent intent = new Intent(context, SecondActivity.class);
context.startActivityForResult(intent, SecondActivity.SECONDACTIVITY_REQUEST);
在我的清单中:
<activity android:name=".SecondActivity" android:screenOrientation="landscape" android:launchMode="standard"></activity>
这对我有用,没有我能看到的任何其他设置。您正在响应哪些事件?
请注意,您也可以返回活动,代码如下:
super.setResult(Activity.RESULT_OK);
super.finish();
编辑... 确保您没有在 Main Activity 的 onKeyDown 事件中吞下该事件。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
//your code here
//if (keyCode ==
//...
//else
return super.onKeyDown(keyCode, event);
}
【讨论】: