You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android WebView旋转屏幕返回上一页问题解决方案咨询

解决WebView屏幕旋转时返回上一页的问题

屏幕旋转时WebView自动回到首页,核心原因是屏幕旋转触发了Activity的销毁与重建,默认会重新执行loadUrl加载初始页面,导致丢失当前浏览状态。以下是两种可行的解决方法:


方法一:阻止Activity旋转时重建(推荐)

直接在AndroidManifest.xml中给MainActivity添加配置,让系统在屏幕旋转时不销毁重建Activity,WebView的状态会自动保留。

修改AndroidManifest.xml中对应的Activity标签:

<activity
    android:name=".MainActivity"
    android:configChanges="orientation|screenSize|smallestScreenSize">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

方法二:保存并恢复WebView状态

如果需要保留Activity重建的逻辑(比如适配多语言、主题切换等场景),可以通过保存WebView的状态,在重建后恢复。

修改MainActivity代码:

  1. 在onCreate中判断是否有已保存的状态,有则恢复,无则加载初始URL
  2. 重写onSaveInstanceState保存WebView状态
  3. 开启DOM存储避免页面状态丢失

修改后的代码片段:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    webView = findViewById(R.id.webView);
    webView.setWebViewClient(new WebClient());
    webView.setWebChromeClient(new WebChromeClient());

    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setAllowFileAccess(true);
    webSettings.setDomStorageEnabled(true); // 开启DOM存储,确保页面状态能被保存

    // 恢复已保存的WebView状态,而非重新加载初始URL
    if (savedInstanceState != null) {
        webView.restoreState(savedInstanceState);
    } else {
        webView.loadUrl("https://siteexemplo.com");
    }
}

// 保存WebView状态
@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    webView.saveState(outState);
}

内容的提问来源于stack exchange,提问作者Henrique Lucas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 19:35:29