Honeycomb中屏幕旋转时Webview重新加载

4

我有一个加载URL的webview。如果我改变我的平板电脑的方向,webview会重新加载URL。如何保留webview的状态,在方向改变时不重新加载URL。到目前为止,我尝试了以下方法:

    @Override
   public void onSaveInstanceState(Bundle savedInstanceState) {
        //Save the state of Webview
        wv.saveState(savedInstanceState);
        super.onSaveInstanceState(savedInstanceState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        // Restore the state of webview
       wv.restoreState(savedInstanceState);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    WindowManager.LayoutParams.FLAG_FULLSCREEN );
    setContentView(R.layout.html);

    if(savedInstanceState!=null){
        // Restore webview state 
        wv.restoreState(savedInstanceState);
     }

    WebView wv = (WebView) findViewById(R.id.webView1);

    wv.getSettings().setJavaScriptEnabled(true);
        wv.getSettings().setBuiltInZoomControls(true);
        wv.setPadding(0, 0, 0, 0);
        wv.setInitialScale(50);
        wv.getSettings().setLoadWithOverviewMode(true);
        wv.getSettings().setUseWideViewPort(true);

        _dialog = ProgressDialog.show(HtmlActivity.this, "", "Loading...", true, true);
        _dialog.setCancelable(true);
        _dialog.show();

        wv.loadUrl("http://www.samsung.com");

        wv.setWebViewClient(new WebViewClient()
        {

                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {

                    return super.shouldOverrideUrlLoading(wv, url);
                }

                @Override
                public void onPageStarted(WebView view, String url, Bitmap favicon) {
                    //_dialog =ProgressDialog.show(HtmlActivity.this, "", "Please wait..."); 
                        super.onPageStarted(wv, url, favicon);
                }

                @Override
                public void onPageFinished(WebView view, String url) {
                    try{
                         _dialog.dismiss();
                        }catch (Exception e) {
                            // TODO: handle exception
                        }
                      //  super.onPageFinished(wv, url);
                }
        });
    }
3个回答

10
在您的清单文件中,为 Web 视图的活动编写以下内容:
 android:configChanges="orientation|screenSize" 

对于较新的API,还需添加screenSize属性...


嗨Pallavi,我正在为两种模式使用不同的布局。虽然启用android:configChanges="orientation"会保留Webview状态,但实际上会搞乱布局。 - Me-an-Droid
在这种情况下,您应该使用RelativeLayout,以便它可以根据可用空间自动调整。 - PrincessLeiha
我已经在使用那个了...但是屏幕底部的按钮大小在webview下面在两种方向上都有所不同。因此,如果我在纵向模式下启动我的活动并将其旋转到横向模式,则会显示纵向模式的按钮,反之亦然。 - Me-an-Droid
你需要在你的XML中处理这个。 - PrincessLeiha
2
这在较新的API上不能正常工作,而应使用android:configChanges="orientation|screenSize"。 - Jimmar

1
在您的清单文件中,针对 Web 视图的活动部分。
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"

1
除了@Pallavi的答案,还请阅读{{link1:http://developer.android.com/guide/topics/resources/runtime-changes.html}} 以了解为什么会发生重新加载。在Android中,活动重启是活动生命周期的重要部分。

@Bananewizen - 我已经仔细阅读了文档。我能够使用onSaveInstanceState恢复图像、字符串等,但我无法保存webview的状态。 - Me-an-Droid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接