android中的方向更改时重新加载活动

时间:2014-02-10 09:24:25

标签: android webview android-activity reload

我开发了一个应用程序,它包含Web视图。

我的问题

当我的手机方向从纵向更改为横向时,整个应用程序再次加载,并且Web视图重新加载显示网站的第一页。

所以我对屏幕方向感到困惑或在该阶段保存数据,所以我该如何解决...

3 个答案:

答案 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"