2013-08-28 239 views
4

當我使用備份&恢復Webview狀態時,我收到此消息: x地址處的網頁可能會暫時關閉或可能永久移動到新的Web地址。如何保存和恢復Webview狀態?

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    webViewShowPoll.saveState(savedInstanceState);          
} 

@Override 
public void onRestoreInstanceState(Bundle outState) { 
    super.onRestoreInstanceState(outState); 
    webViewShowPoll.restoreState(outState); 
} 

和AndroidManifest.xml中

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.SET_DEBUG_APP"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  


    <activity 
     android:name="com.omid.epoll.mobile.Poll" 
     android:launchMode="singleInstance" 
     android:label="@string/title_activity_poll" 
     android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"> 
    </activity> 
+0

我做了以下內容:http://計算器的.com /一個/2413303分之27020832 – EpicPandaForce

回答

2
if (isInternetPresent) { 
     // Internet Connection is Present 
     // make HTTP requests 
     // showAlertDialog(HomeScreen.this, "Internet Connection", 
     // "You have internet connection", true); 

     webviewbrowse.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); 
     webviewAds.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); 
     webviewbrowse.loadUrl("http://www.example.com"); 
    } else { 
     // Internet connection is not present 
     // Ask user to connect to Internet 
     webviewbrowse.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
     webviewAds.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
     webviewbrowse.loadUrl("http://example.com"); 
     showAlertDialog(HomeScreen.this, "internet doesn't connect", 
       " please connect to internet", false); 
    } 
7

SAVE的WebView州

public class Tab2Fragment extends Fragment { 

    private WebView webView; 
    private Bundle webViewBundle; 

    @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    LinearLayout ll = (LinearLayout) inflater.inflate(R.layout.tab2, container, false); 

    webView = (WebView) ll.findViewById(R.id.webView1); 
    webView.setWebViewClient(new WebViewClient()); 

    if (webViewBundle == null) { 
     webView.loadUrl("http://www.lucazanini.eu"); 
    } else { 
     webView.restoreState(webViewBundle); 
    } 

    return ll; 
    } 

    @Override public void onPause() { 
    super.onPause(); 

    webViewBundle = new Bundle(); 
    webView.saveState(webViewBundle); 
    } 
} 
2

restoreState從不可靠。這也許就是爲什麼文檔現在說這個。

如果WebView中有機會建立國家 (載入網頁,創建一個後退/前進列表等)有可能是 不良的副作用後,它被稱爲。請注意,此方法不再使用 還原此WebView的顯示數據。從而

而對於saveState和()中的相應條目講:

請注意,此方法不再存儲的顯示數據爲 這個web視圖。

你真的應該在onCreate方法裏面做的是調用webView.loadUrl(),如果你想顯示最近訪問過的網址,請參閱本answer

如果你關心的WebView重裝對取向變化等

你可以設置你的活動來處理的方向和keyboardHidden變化,然後就離開了的WebView單獨

0

如果您的WebView是一個片段,請檢查以下內容:

節省:

@Override 
public void onSaveInstanceState(Bundle outState) { 
    webView.saveState(outState); // output would be a WebBackForwardList 
} 

You may check the doc for saveState.

恢復:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    ... 

    if (savedInstanceState != null) { 
     webView.saveState(savedInstanceState); 
    } else { 
     webView.loadUrl("http://mypage"); 
    } 
}