Layout restarts after device's rotation
我做了一个简单的应用程序,有2个按钮(开始和退出)和一个空的TextView。 如果我按下开始按钮,将更新TextView。 我的问题是,如果我旋转设备,我的布局将重新启动(如果开始按下,TextView将再次变空。为什么?
-
阅读此处:developer.android.com/guide/topics/resources/… - 这是记录良好的行为。 只要您的小部件有ID,操作系统就会保存一些状态,但您负责通过活动生命周期回调来保存状态。 这可能需要一两个小时来理解,但是一旦掌握了它,它将获得巨大的回报。
这是因为在屏幕旋转后重新创建活动。 简单的解决方法是将android:id添加到xml的TextView。
Android会自动销毁活动并重新创建活动,以便在旋转设备时使其适应屏幕的新方向。
-
我怎么能避免这种情况?
-
请参阅fisher3421关于添加ID的帖子,这将允许操作系统在轮换时保存/恢复
-
避免活动破坏和娱乐是不可避免的,但你可以做的是强迫活动保持固定的方向。或者在活动的saveInstanceState(Bundle)方法中保存您需要的内容,然后通过onCreate(Bundle)从传递给它的同一个包中退出它;或restoreInstanceState();内容onConfigChange()也是一种选择,但非常气馁。
-
我完全不理解downvote!
-
我注意到只有一个帖子没有被投票,这就是渔民。腥。
-
@Samuel可能是因为他是唯一正确的答案而被投票的人完全错了?
-
我读了其他的答案,但我没有看到一件事。如果我在方法执行期间旋转设备,有没有办法从停止的位置继续该方法?
-
323go在第一条评论中给出了正确的答案。阅读文档。如果您要构建Android应用程序,那么您必须学习如何!
如果您不希望在方向更改时重新创建活动,则可以添加此行
1
| android:configChanges="orientation|keyboardHidden" |
在Android的表现为该活动..
例如: -
1 2 3
| <activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name"> |
参考这里
-
不要这样做,除非你知道你在做什么。不建议这样做。
-
为什么这个aswer downvoted?默认情况下,更改方向时,将重新启动活动。但是如果你在活动的清单文件中放置android:configChanges="orientation"这样的东西,然后覆盖onConfigurationChanged! developer.android.com/reference/android/app/…
-
它被低估了,因为它是一种非常沮丧的做法,应该只是那些真正知道如何处理配置变化的程序员的最后手段;正如你所建议的那样,它不能被用作妥善保存状态的解决方法。到目前为止,我只收到两个downvotes,我感到很惊讶。
-
developer.android.com/guide/topics/manifest/…"注意:应避免使用此属性,并且仅作为最后手段使用。请阅读处理运行时更改以获取有关如何正确处理因配置更改而导致重新启动的更多信息。"
-
不应该使用的另一个原因是因为如果你没有正确编写onCreate(),onResume(),onPause()等代码,那么当你的活动被销毁并重新创建时,你很可能会遇到bug,特别是NPE。除了方向和键盘更改之外的所有其他原因。遗憾的是,这在Play商店很常见,因为很多开发人员似乎认为android:configChanges是某种解决方法,可以避免以设计工作方式使用Android。