2015-01-15 75 views
1

我有一个包含4个元素的活动。包含日期列表的微调框,包含小时列表的微调框,按钮和列表视图。微调器的选定项目用于形成一个Web服务URL,当点击该按钮并在列表视图中显示响应时调用该URL。正在Android上执行屏幕旋转时停止onCreate

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

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

防止活动休闲

回答

2

最简单的方法把这个在你AndroidManifest

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

阅读更多信息 - Supporting Multiple Screens

+0

这真的不是一个好主意,请参阅:http://stackoverflow.com/questions/7818717/why-not-use-always-androidconfigchanges-keyboardhiddenorientation – goetzc 2016-10-12 21:34:59

0

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

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

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

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

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

如果您正在处理web服务,请不要尝试为此创建自己的解决方案。有好几个库可以很好地处理这个问题,例如RoboSpice,你可能永远不会得到和那些库一样好的快速解决方案。试一试。

而且,看这个谷歌I/O视频有关开发Android REST客户端应用程序:https://www.youtube.com/watch?v=xHXn3Kg2IQE

0

有你的按钮设置一个静态类变量,或共享偏好。然后,调用读取该值的方法,并执行所需的操作。然后,在onResume()中调用同样的方法,可能基于一个条件...我认为这是对我有用的。当您从配置更改或杀死回来时,onResume()应该重新执行您上次完成的任何操作。