我有一个应用程序。假设有三个活动 A、B、C。
A->B(子活动)->C(子活动)。
我已经设置了这些类型的代码来切换到下一个活动。
setContentView(R.layout.B);
问题是当我在活动 B 或 C 上单击模拟器或手机上的后退按钮时,关闭应用程序窗口回到家。我希望如果我在活动 C 上按下返回按钮,它将首先移动到活动 B,然后移动到 A,然后如果我再次单击返回按钮,那么它会进入主屏幕或关闭应用程序窗口。
我的代码中有任何方法或错误或必须编辑吗?
我有一个应用程序。假设有三个活动 A、B、C。
A->B(子活动)->C(子活动)。
我已经设置了这些类型的代码来切换到下一个活动。
setContentView(R.layout.B);
问题是当我在活动 B 或 C 上单击模拟器或手机上的后退按钮时,关闭应用程序窗口回到家。我希望如果我在活动 C 上按下返回按钮,它将首先移动到活动 B,然后移动到 A,然后如果我再次单击返回按钮,那么它会进入主屏幕或关闭应用程序窗口。
我的代码中有任何方法或错误或必须编辑吗?
您可以覆盖默认的后按并告诉它您重置了内容视图,但您必须自己跟踪堆栈。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//code to reset view
return true;
}
return super.onKeyDown(keyCode, event);
}
这就是说我真的建议你看看允许android以默认方式处理堆栈。你的方法最终会在未来让你头疼。
当您使用setContentView时,您不会在活动之间切换。
您实际上只是在更改一项且仅一项活动的内容。这解释了为什么当您按下后退按钮时它会关闭应用程序窗口。
活动 A / 内容 A -> 活动 A / 内容 B -> 活动 A / 内容 C
如果你想从一个活动转到另一个活动:你应该使用 Intent 和 startActivity。
例如,您在实现此按钮的 onClick 函数中实现一个按钮:
Intent i = new Intent(this, ActivityTwo.class);
startActivity(i);
在另一个名为ActivityTwo.java的 Java 文件中,您实现了一个扩展 Activity 的类ActivityTwo,在 onCreate 方法中您设置了一个不同的视图,这可能相当于内容 B
你的申请方案是这样的:
活动 A / 内容 A -> 活动 B / 内容 B -> 活动 C / 内容 C
当您将进行活动 C 并按下后退按钮时,您将进入活动 B。
您需要实际启动一个新活动,然后在其中设置布局以使后退按钮起作用。看看Tasks和Back Stack
仅将视图设置为新布局与启动新活动不同。从您的代码中,您似乎只是在更改布局而不是开始新的活动。
正如方法setContentView
所说,您只是在更改Activity A的内容视图。检查Activity 生命周期和startActivity
启动新 Activity 的方法,并阅读任务和返回堆栈以获取更多信息。