我在其中有活动ListView,在活动的onCreate方法中我有用于填充ListView数据的代码,这个数据是基于服务器的,因此填充包括调用网络URL。我在相同的活动类中有ListView的ArrayAdapter。
现在我面临的问题是,在休息所有场景中,我的活动以正确的方式运行,但是当正在进行方向[纵向或其他方式的肖像]时,数据正在丢失并且新数据调用是否需要填充相同的旧数据现在这不是代码,我应该如何处理它。
答案 0 :(得分:23)
Android会停止并重新启动您的活动,除非您告诉它您将自己处理方向更改。它这样做是为了您可以指定特定方向的不同资源(例如布局)(以及其他原因)。
您需要在AndroidManifest.xml中向活动展示添加android:configChanges="orientation",并且需要覆盖onConfigurationChanged()。我不相信你需要在onConfigurationChanged()中做任何特别的事情,只需实现它就可以做到这一点。
答案 1 :(得分:12)
对于那些定位API 13或更高版本的人,还应使用" screenSize" 。如果是这种情况,请添加
android:configChanges="orientation|screenSize"
到你的Android清单。
更多信息here。
答案 2 :(得分:2)
AFAIK整个活动会在方向更改时重新创建! 如果您切换到anoter应用程序并稍后返回,情况也是如此。 我建议存储数据是SharedPreferences或将它们序列化为XML并存储它们。
另一种可能性是注册您自己的服务,该服务将数据存储在内存中,活动可以从服务中获取数据。
答案 3 :(得分:1)
为什么不将任何数据保存到parcelable中?如果你在onCreate中获得的包中包含保存的数据状态,那么重新设置列表适配器?这是一个很好的代码示例:http://blog.cluepusher.dk/2009/10/28/writing-parcelable-classes-for-android/
答案 4 :(得分:0)
android:configChanges="orientation|screenSize"
只有当我们没有横向模式的其他布局时,此代码才有效!