【问题标题】:Stopping onCreate being executed on screen rotation in Android停止在 Android 中的屏幕旋转上执行 onCreate
【发布时间】:2015-01-16 05:50:30
【问题描述】:

我有一个包含 4 个元素的活动。一个包含日期列表的微调器,一个包含小时列表的微调器,一个按钮和一个列表视图。微调器的选定项用于形成一个 Web 服务 URL,当单击按钮时调用该 URL,响应显示在列表视图中。

问题是,如果用户以纵向模式查看应用程序,选择日期,选择小时并单击按钮,则 Web 服务调用的响应会显示在列表视图中,但是,如果设备旋转到横向那么列表视图中的数据就消失了(因为要获得它需要单击按钮)。

我知道屏幕旋转时会调用 onCreate。我不想强制方向,所以有什么办法可以阻止列表视图被清除?请注意,我的微调器中的选定值在旋转后保持不变,只是列表视图中的响应丢失了。

【问题讨论】:

    标签: android


    【解决方案1】:

    防止活动重新创建的最简单方法将其放入 AndroidManifest

    <activity android:name=".YourActivityName"
                      android:configChanges="orientation|keyboardHidden|screenSize">
    

    阅读本文了解更多信息 - Supporting Multiple Screens

    【讨论】:

    【解决方案2】:

    您可以通过设置screenOrientation 属性来强制AndroidManifest.xml 中的活动屏幕方向:

    <activity android:name=".FooActivity"
        android:screenOrientation="portrait"/>
    

    这是一个半解决方案。如果要处理屏幕旋转,则应保存并恢复活动状态。这是我见过的任何 Android 应用程序中主要的皇家 PITA。

    问题是,您的应用程序逻辑与视图代码混合在一起,随时可能被破坏。完美结合,谷歌!这就像运行一个在执行过程中会消失的函数。 :)

    为了应对这个令人遗憾的设计决策,您可能希望将应用程序逻辑移至服务,当屏幕旋转时,服务不会被破坏。当您将逻辑与视图分开时,这种 2 层设计更接近于普遍接受的 MVC 模式。服务保持不变,活动根据需要从服务中附加和分离,使屏幕旋转处理变得轻而易举。

    如果您正在处理 Web 服务,请不要尝试为此发明自己的解决方案。有几个不错的库可以很好地处理这个问题,例如RoboSpice,您可能永远不会找到任何与这些库一样好的快速解决方案。试试看吧。

    另外,请观看有关开发 Android REST 客户端应用程序的 Google I/O 视频:https://www.youtube.com/watch?v=xHXn3Kg2IQE

    【讨论】:

      【解决方案3】:

      让您的按钮设置一个静态类变量或共享首选项。然后,调用一个读取该值的方法,并执行您想要的操作。然后,在 onResume() 中调用相同的方法,可能基于条件......我认为这对我有用。当您从配置更改或终止返回时,onResume() 应该重新执行您上次完成的任何操作。

      【讨论】:

        猜你喜欢
        • 2011-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多