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代码:
- 在
onCreate中判断是否有已保存的状态,有则恢复,无则加载初始URL - 重写
onSaveInstanceState保存WebView状态 - 开启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
相关产品推荐
相关产品推荐

