【问题标题】:Save state WebView in Fragment在 Fragment 中保存状态 WebView
【发布时间】:2013-12-06 03:28:15
【问题描述】:

我想要在 Fragment 中保存状态的 webview。我想要的是。当我通过导航抽屉切换片段时,我想将我的 webview 的状态保存在片段中。我找到了一些代码来保存状态,但实际上我不知道在哪里写它。有人可以帮我吗?对不起我的英语。

这是保存状态的代码

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

@Override
public void onActivityCreated(Bundle savedInstanceState) {
   super.onActivityCreated(savedInstanceState);
   mWebView.restoreState(savedInstanceState);
}

这是我的代码

public class Zastupovanie extends SherlockFragment{

    private Context context;
        
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle saved){

        View v = inflater.inflate(R.layout.zastupovanie, group, false);
        final ProgressDialog pd = ProgressDialog.show(getActivity(),  "", "Prosím čakajte. Prebieha načítavanie... ", true);
    
        final WebView myWebView = (WebView) v.findViewById(R.id.zastupovanie2);
        myWebView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                pd.dismiss();
            }
        });
    
        myWebView.getSettings().setBuiltInZoomControls(false); 
        myWebView.getSettings().setSupportZoom(false);
        myWebView.getSettings()
           .setJavaScriptCanOpenWindowsAutomatically(true);   
        myWebView.getSettings().setJavaScriptEnabled(true);
        myWebView.getSettings().setAllowFileAccess(true); 
        myWebView.getSettings().setDomStorageEnabled(true);
        myWebView.getSettings().setDefaultZoom(ZoomDensity.FAR);      
        myWebView
            .loadUrl("http://soszm.edupage.org/substitution/?");
    
        return v;
    }
        
}

【问题讨论】:

    标签: android android-fragments webview


    【解决方案1】:

    BottomNavigationView 中的Webview

    我在 BottomViewNavigation 的一个片段中使用 web-view。 @Rafael T 提供的解决方案是一个可靠的解决方案。但是当您导航到 BottomNavigationView 中的另一个 Fragment 时,不会调用 onSaveInstanceState()。于是我就这样保存并恢复了Webview的状态。

    class MyFragment extends Fragment {
    
        private Bundle webviewstate;
        private Webview mywebview;
    
        // Saving state
        @Override
        public void onPause(){
           super.onPause();
           webviewstate = new Bundle();
           mywebview.saveState(webviewstate);
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState){
    
           if(webviewstate==null){
                myWebView.loadUrl("http://soszm.edupage.org/substitution/?");  //Load the page for first time
           }else{
                myWebView.restoreState(webviewstate);    // Restore the state
           }
    
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      您可以像这样简单地将这个方法添加到您的片段中:

      public class Zastupovanie extends SherlockFragment{
      
          Context context;
          private WebView myWebView
      
          @Override
          public void onSaveInstanceState(Bundle outState) {
              super.onSaveInstanceState(outState);
              myWebView.saveState(outState);
          }
      
          @Override
          public void onActivityCreated(Bundle savedInstanceState) {
              super.onActivityCreated(savedInstanceState);
              myWebView.restoreState(savedInstanceState);
          }
      
          @Override
          public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle saved)
              {
              View v = inflater.inflate(R.layout.zastupovanie, group, false);
              final ProgressDialog pd = ProgressDialog.show(getActivity(),  "", "Prosím čakajte. Prebieha načítavanie... ", true);
      
              myWebView = (WebView) v.findViewById(R.id.zastupovanie2);
              myWebView.setWebViewClient(new WebViewClient() {
                  @Override
                  public void onPageFinished(WebView view, String url) {
                      pd.dismiss();
                  }
              });
      
              myWebView.getSettings().setBuiltInZoomControls(false); 
              myWebView.getSettings().setSupportZoom(false);
              myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);   
              myWebView.getSettings().setJavaScriptEnabled(true);
              myWebView.getSettings().setAllowFileAccess(true); 
              myWebView.getSettings().setDomStorageEnabled(true);
      
              myWebView.getSettings().setDefaultZoom(ZoomDensity.FAR);
      
              myWebView.loadUrl("http://soszm.edupage.org/substitution/?");
      
              return v;
              }
      
          }
      

      【讨论】:

      • 谢谢,它运行良好:) 但有时应用程序崩溃,但可能是因为 RAM 或有什么问题?
      • @user2900523 我还发现我的应用程序稳定性在保存和恢复 webview 状态时急剧下降。内部崩溃很多。你有没有找到解决办法?谢谢
      猜你喜欢
      • 2011-10-13
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多