3つのタブを持つタブホストがあります。これらの各タブには、webiviewがあります。タブをクリックすると、以前にアクセスしたことがある場合でもWebビューを「再ロード」する必要があり、保存されていません。 Webビューを保存する方法はありますか?
これは、アクティビティでonSaveInstanceState(Bundle outState)を上書きし、WebビューからsaveStateを呼び出すことで処理できます。
@Override
protected void onSaveInstanceState(Bundle outState) {
webView.saveState(outState);
super.onSaveInstanceState(outState);
}
もちろん、Webビューが再膨張した後、onCreateでこれを回復します。
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.blah);
WebView webview = (WebView)findViewById(R.id.webview);
if (savedInstanceState != null)
webview.restoreState(savedInstanceState);
else
webview.loadUrl(URLData)
}
restoreState は決して信頼できませんでした。そして2015年に来て、文書は事実を受け入れます。 (変更はおそらく2014年頃にドキュメントに加えられました)。これはそれが今言っていることです。
このWebViewが状態を構築する機会(ページのロード、バック/フォワードリストの作成など)を行った後に呼び出された場合、望ましくない副作用が発生する可能性があります。このメソッドでは、このWebViewの表示データは復元されないことに注意してください。
そして、saveState()の対応するエントリはこう話します:
このメソッドは、このWebViewの表示データを保存しなくなったことに注意してください。
OnCreateメソッド内で実際に行う必要があるのは、最後にアクセスしたURLを表示する場合にwebView.loadUrl()を呼び出すことです。これを参照してください answer :
向きの変更などでウェブビューがリロードされるのが心配な場合。
方向とkeyboardHiddenの変更を処理するようにアクティビティを設定してから、WebViewをそのままにしておくことができます
または、tabHostでフラグメントを使用することを検討することもできます。別のwebViewに入るときに、フラグメントを非表示に設定し、他のフラグメントを表示するように設定できます。前のフラグメントに戻っても、コンテンツは破棄されていません。それは私がそれをした方法であり、それは私のために働いた。