我正在开发一个Android应用程序,而不是理解后退按钮。
有一个活动(比如A1),通过点击按钮,用户可以转到另一个活动(比如说A2)。一旦用户完成A2活动,他点击后退按钮,返回上一个活动A1。所有文档都说,A1此时将onResume()。
确实如此。但是,如果我在A2中,并更改屏幕方向(从横向到纵向或反之亦然),则会发生一些非常不同的事情。 A2活动再次出现,按预期进入不同的屏幕方向。当我现在按BACK时,活动A2再次自行调整(不改变屏幕方向)。再次按BACK,再次导致活动A2再次出现。第三次按下会回到活动A1。
我在这里做错了什么,我错过了什么?感谢
彼得
答案 0 :(得分:0)
我的问题没有完全正确地表达。我略微简化了案例。我使用Spinner而不是Button来转移到下一个Activity。
Spinner(和Gallery)有一个严重错误,文档中没有提到 - 当用户物理点击微调器控件时,以及当框架代码首次布置微调器时,会调用OnItemSelectedListener事件处理程序。因此,您的微调器处理代码必须确定事件是由用户选择还是由布局的微调器触发的。最简单的方法是使Spinner中的第一项始终为"尚未进行选择",并忽略该选择上的所有事件。 请参阅Android Spinner selection和类似帖子。
在我的情况下,方向更改导致微调器再次布局,因此我从中获得了两个事件,第一个是布局事件,第二个来自之前选择的条目。并且 导致虚假的第二个活动被启动,而 意味着需要按下3个后退按钮才能恢复"到第一个活动。它实际上是在第一次按下时,然后旋转器发射了一个布局事件和一个常规事件,让我进入第二个活动两次。在屏幕上看不到,但是看到了使用日志消息。
更改方向时,将销毁当前活动,并创建/启动新活动。 当您更改方向并按后退键时,前一个活动将从暂停堆栈的顶部弹出,销毁,并创建/启动该活动的新版本。
更改屏幕方向时,永远不会保留旧方向的活动。它将立即被销毁,或者如果它在Paused堆栈中较低,它将在顶部被破坏。
答案 1 :(得分:-1)
您没有处理配置更改。查看this链接,它可能对您有所帮助。
当您将方向从纵向更改为横向或横向更改为纵向时,如果您未处理配置更改,则会重新创建活动。