我开发了一个应用程序,它包含Web视图。
我的问题
当我的手机方向从纵向更改为横向时,整个应用程序再次加载,并且Web视图重新加载显示网站的第一页。
所以我对屏幕方向感到困惑或在该阶段保存数据,所以我该如何解决...
答案 0 :(得分:0)
默认行为是在配置发生更改(例如方向更改)时重新启动活动。
要覆盖此操作,您需要告诉系统您将自己处理方向更改,方法是将其添加到<activity>
元素中的清单文件中:
android:configChanges="keyboardHidden|orientation|screenSize"
您可能还想覆盖在发生此类更改时将调用的onConfigurationChanged。
请参阅http://developer.android.com/guide/topics/manifest/activity-element.html#config
答案 1 :(得分:0)
是的,在Android中,当您更改屏幕方向时,活动会被销毁并重新创建。因此,您需要在娱乐时恢复应用程序状态。在途中是使用回调方法onSaveInstanceState()
,您可以使用该方法将状态保存在Bundle
。
活动在此解释:http://developer.android.com/guide/components/activities.html我建议您查看该页面上的示例和更详细的说明。
答案 2 :(得分:0)
Android Activity生命周期清楚地表明了这种行为。
会发生什么
每当你启动一个Activty时就会创建(在onStart()方法之后)
onCreate(Bundle onSavedInstance)
上面提到的变量onSavedInstance最初收到null,因为没有保存。 但在定位期间,整个布局层次结构必须根据现有模式的新模式进行调整(从纵向 - >横向,反之亦然)。此更改可能会删除您在活动中的先前数据。所以要避免这样的问题(丢失数据),有一个方法
onConfigurationChange(Bundle saveSomething)
将调用此方法来处理对此的一些配置更改, 默认实现将为您节省一些数据,如editText中的某些文本。
注意这个方法应该用于保存一些简单的数据。
示例强> 假设你已经为激活布局应用了背景颜色,现在你旋转它默认实现不会保存它但是onConfigurationChange如果你想要你可以像这样保存它
saveSomething.putInt("color",1);
Inside onCreate
protected void onCreate(Bundle onSavedInstance){
if(onSavedInstance!=null){
int color=onSavedInstance.getInt("color");
if(color==1){
setBackgroundColor(Color.BLACK);
}
}
}
在清单文件的activity元素中添加以下行,您将处理配置中的更改
android:configChanges="keyboardHidden|orientation|screenSize"