2013-08-28 174 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"); 
    } 
}