【问题标题】:Loss of variables switching orientations变量切换方向的丢失
【发布时间】:2012-03-18 01:50:31
【问题描述】:

我是安卓新手。我已经编写了几个程序并在我的手机上试用了它们。当我切换方向时,就像我的手机重新启动程序一样。我所有的变量都会被重置。事实上,唯一不会重置的是编辑文本视图中的文本。这是什么原因造成的?我怎样才能阻止它?我试过在谷歌和堆栈溢出上查看它,但我所看到的只是如何改变视图方向。我什至尝试在一个程序中使用 get text 方法设置变量,但这不起作用。

【问题讨论】:

标签: android variables orientation


【解决方案1】:

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

准确地说,当前可见的Activity 被完全销毁并重新创建。您的“应用程序”的其他组件可能会也可能不会受到影响。

这是什么原因造成的?我怎样才能阻止它?

这是设计使然,至于停止它,您可能想也可能不想这样做。

如前所述,可以指定您要自己处理“配置”更改(例如方向),甚至只强制进行一项更改(例如,横向或纵向)。

但是,在许多情况下,应用开发者可能会根据设备是处于一个方向还是另一个方向来选择更改布局。某些布局可能在纵向上工作得很好,但在横向上却不行(反之亦然),设计方法的目的(破坏/重新创建当前可见的Activity)旨在适应这种情况。

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

为此,必须了解Activity 生命周期,以及利用在整个生命周期中调用的各种Activity 方法来保存/恢复数据。

基本阅读...

Runtime Changes

Activity Lifecycle

Application Fundamentals

【讨论】:

  • 感谢您提供详尽的回答和条款!至于为什么做完。不过我必须说实话。我在阅读开发人员页面时迷路了,我不明白他们在说什么,除非我事先有很好的基础知识和理解。我从示例和教程中学习得最好。当然是玩方法。
  • @JBreezy901​​:我完全理解您对开发人员页面的意思。 16 个月前,当我第一次开始使用 Android 时,我在同一个地方,即使是现在,我也可能只完成了其中一小部分的工作(而且只有我到目前为止需要的东西)。 Application Fundamentals 文档以及 Activity 及其生命周期的文档绝对值得收藏。很高兴我能有所启发,玩得开心。
【解决方案2】:

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

【讨论】:

  • 我仍然希望我的程序在从纵向和横向切换时重新调整其布局。我想要保存的只是我的变量。特别是整数。这行得通吗?
  • 是的,如果您将所有变量放入该捆绑包中,然后在您的 onCreate 方法中从捆绑包中检索它们,而不是从头开始初始化您的活动,那么您将一切就绪。
【解决方案3】:

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

有关设置的更多信息,请参阅this

【讨论】:

    【解决方案4】:

    最好加android:configChanges="keyboardHidden|orientation|screenSize" toAndroidManifest.xmlinactivity

    【讨论】:

      【解决方案5】:

      ViewModel 类提供了这个特性:

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

      Android Developers

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 2010-12-24
        • 1970-01-01
        • 2012-08-06
        • 2023-03-21
        • 1970-01-01
        相关资源
        最近更新 更多