我使用web視圖創建一個基本的網頁瀏覽器, 目前,我有一個活動,多個片段:的WebView的保存狀態,當包含web視圖片段被替換
- 瀏覽器 - 別的東西 - 別的東西
在瀏覽器中的片段我有web視圖:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".fragments.BrowserFragment">
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/webview_holder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true">
<include
android:id="@+id/button_layout"
layout="@layout/bottom_btn_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"/>
<LinearLayout
android:id="@+id/web_page_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/button_layout"
android:orientation="vertical">
</LinearLayout>
<WebView
android:id="@+id/web_page"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/button_layout"/>
</RelativeLayout>
</android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>
我能夠節省屏幕旋轉web視圖的狀態,通過
@Override
public void onSaveInstanceState(Bundle outState) {
if(mWebView != null){
mWebView.saveState(outState);
}
super.onSaveInstanceState(outState);
}
,並呼籲該OnActivityCreated:
mWebView = (WebView)getActivity().findViewById(R.id.web_page);
if (savedInstanceState != null){
mWebView.restoreState(savedInstanceState);
}else{
mWebView.loadUrl(makeUrl(url));
}
當屏幕旋轉和活動被重建這工作得很好。 但是,當我使用導航抽屜和替換片段在同一個容器中,然後嘗試回到相同的片段。 webview的狀態丟失了。
我得到的一點是,當存在片段事務時,不會調用onSaveInstanceState()。所以我試圖通過從片段的OnPause調用onSaveInstanceState()來保存webView狀態。但在這種情況下,我在OnCreateView中將savedInstanceState設置爲null,因此我無法恢復狀態。
我需要維護多個webviews的狀態,並在單擊列表中將其返回給他們。
我也嘗試了在onSave()在片段中調用時,在活動中的靜態HashMap中嘗試保存webview,並嘗試將其分配給newFragment的webview。但在這種情況下,我得到了空白屏幕。
有人能給我指示我該如何處理這個問題。
保存的URL中的onPause()方法,將其發送到活動並在的onResume恢復它()方法,在你的WebView片段 –
謝謝您的回覆,但我不希望只是restrore該網址,但我想恢復完整的狀態。包括後退和前進的歷史,在頁面上的位置,半填充表格,如果有的話等等。我剛剛開始工作,我在OnPause上保存了狀態。將很快發佈答案。 –