Maa*_*ten 5 android state webview
WebView我的应用程序中有一个加载动态内容,我希望视图在设备轮换时保持不变.所以我写了以下几行代码:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mWebView.saveState(outState);
}
Run Code Online (Sandbox Code Playgroud)
在我的onCreate()中:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (savedInstanceState != null) {
if(D.bug){
Log.i(TAG, "Restoring browser state");
}
mWebView.restoreState(savedInstanceState);
} else {
if(D.bug){
Log.i(TAG, "Not restoring browser state");
}
mWebView.loadUrl("file:///android_asset/html/browser_3col.html");
}
return mWebView;
}
Run Code Online (Sandbox Code Playgroud)
但这有效地重新加载了页面.我想传递动态生成的HTML.
我正在考虑通过a将整个文档HTML转储JavascriptInterface,将其存储在outState中,然后再通过它重置它JavascriptInterface.
这会是一个好方法吗?有没有方法WebView可以让我得到它的内在HTML?
我当前的解决方案有以下代码:
在我的 JavaScript 代码中:
window.JSInterface.dumpInnerHtml(document.documentElement.innerHTML);
Run Code Online (Sandbox Code Playgroud)
在我的JavascriptInterface:
@JavascriptInterface
public void dumpInnerHtml(String htmlDump) {
if (!mBrowseFragment.isDetached()) {
mBrowseFragment.updateWebviewHtml(htmlDump);
}
}
Run Code Online (Sandbox Code Playgroud)
在onSaveInstance():
super.onSaveInstanceState(outState);
mWebView.saveState(outState);
outState.putString(INSTANCE_CONTAINER_HTML, mCurrentHtmlDump);
Run Code Online (Sandbox Code Playgroud)
在onCreate():
if (savedInstanceState != null) {
mWebView.restoreState(savedInstanceState);
String restoredHtml = savedInstanceState
.getString(INSTANCE_HTML);
if (restoredHtml != null) {
mWebView.loadData(restoredHtml, "text/html", "utf-8");
}
}
Run Code Online (Sandbox Code Playgroud)
几乎可以用了。但我有一些问题。loadData() 似乎不解释脚本标签。(我的 js 函数中断了。),我觉得这个问题可以更优雅地解决。
| 归档时间: |
|
| 查看次数: |
907 次 |
| 最近记录: |