2016-07-28 57 views
0

我使用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。但在這種情況下,我得到了空白屏幕。

有人能給我指示我該如何處理這個問題。

+0

保存的URL中的onPause()方法,將其發送到活動並在的onResume恢復它()方法,在你的WebView片段 –

+0

謝謝您的回覆,但我不希望只是restrore該網址,但我想恢復完整的狀態。包括後退和前進的歷史,在頁面上的位置,半填充表格,如果有的話等等。我剛剛開始工作,我在OnPause上保存了狀態。將很快發佈答案。 –

回答