失去变量切换方向

时间:2012-03-18 01:50:32

标签: android variables orientation

我是android新手。我写了几个程序并在手机上试了一下。当我切换方向时,就像我的手机重启程序一样。我的所有变量都被重置了。实际上,唯一不重置的是编辑文本视图中的文本。是什么导致这个?我怎么能阻止它?我试过在谷歌和堆栈溢出上看它,但我所看到的是如何通过一起改变视图方向。我甚至尝试在一个程序中使用get text方法设置变量,但这不起作用。

6 个答案:

答案 0 :(得分:8)

  

当我切换方向时,它就像我的手机重启程序一样。

准确地说,当前可见的Activity被完全破坏并重新创建。您的“申请”的其他组成部分可能受到影响,也可能不受影响。

  

是什么原因引起的?我怎么能阻止它?

这是设计和停止它,你可能会或可能不想这样做。

正如已经提到的,可以指定您想要自己处理“配置”更改(例如方向),甚至只强制一个(例如横向或纵向)。

然而,在许多情况下,应用开发者可能会选择根据设备是在一个方向还是另一个方向来更改布局。一些布局可以在纵向上正常工作但在横向上不能正常工作(反之亦然),并且设计方法的目的(破坏/重新创建当前可见的Activity)是为了适应这种情况。

如果开发人员选择不自行处理配置或强制执行特定方向,处理事情的正确方法是确保在“易失性”UI元素(例如EditTexts)中输入的所有数据都已正确保存并在之后重新创建方向改变。

要做到这一点,理解Activity生命周期至关重要,因为使用在整个生命周期中调用的各种Activity方法来保存/恢复数据。

基本阅读......

Runtime Changes

Activity Lifecycle

Application Fundamentals

答案 1 :(得分:4)

确保您实施onSaveInstanceState并准备好从Bundle中的onCreate恢复您的活动,您将全力以赴。这些将在轮换期间调用,因此您之后将有一个新的活动,但如果您已保存状态并可以恢复它,则无需担心。

答案 2 :(得分:2)

这是设计的,当方向改变时将调用onCreate。如果不需要,您可以将其设置为不响应AndroidManifest.xml中的方向更改,因此不会重新创建您的活动,为您的活动设置android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden"会将其限制为纵向模式。

有关设置的详细信息,请参阅this

答案 3 :(得分:2)

See this answer:寻找罗伯特的答案。这正是你需要做的。

答案 4 :(得分:0)

最好添加android:configChanges="keyboardHidden|orientation|screenSize" to AndroidManifest.xml in活动

答案 5 :(得分:0)

ViewModel类提供此功能:

  

ViewModel对象会在配置更改期间自动保留,以便它们保存的数据可立即用于下一个活动或片段实例。

请参见Android Developers