2014-04-29 132 views
0

我有webview用於顯示Disqus服務中的評論。這裏是片段代碼的一部分:恢復WebView的狀態

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

     View root = inflater.inflate(R.layout.fragment_coments, container, false); 

     mComentsView = (WebView)root.findViewById(R.id.coments_view); 

     String htmlComments = getHtmlComment(createId(), "androidaci"); 

     mComentsView.getSettings().setJavaScriptEnabled(true); 
     mComentsView.setWebViewClient(new ComentsWebViewer(htmlComments)); 
     mComentsView.setWebChromeClient(new WebChromeClient()); 
     if(savedInstanceState != null){ 
      Log.e("restoring", "state"); 
      mComentsView.restoreState(savedInstanceState); 
     } else { 
      Log.e("loading", "website"); 
      mComentsView.loadData(htmlComments, "text/html", null); 
     } 
     return root; 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     mComentsView.saveState(outState); 
    } 


    public String getHtmlComment(String idPost, String shortName) { 

     return "<div id='disqus_thread'></div>" 
       + "<script type='text/javascript'>" 
       + "var disqus_identifier = '" 
       + idPost 
       + "';" 
       + "var disqus_shortname = '" 
       + shortName 
       + "';" 
       + " (function() { var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;" 
       + "dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';" 
       + "(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); })();" 
       + "</script>"; 
    } 

問題是在輪換webview重新加載,我想知道爲什麼。我嘗試保存並恢復狀態,並在日誌中恢復狀態語句,但看起來它仍然在輪換更改時重新加載。我怎樣才能防止這種重新加載?

回答

0

使用此代碼。

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    // Save the WebView state (including history stack) 
    mWebView.saveState(savedInstanceState); 

    // Always call the superclass so it can save the view hierarchy state 
    super.onSaveInstanceState(savedInstanceState); 
} 
+0

羅,還是一樣的結果 –

0

要將活動在AndroidManifest.xml中

android:configChanges="keyboard|keyboardHidden|screenSize|orientation" 

和你的Java代碼

// survive screen orientation change 
@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
} 

爲我工作:)

+0

可以工作,但這是一個不好的解決方案 –