片段中的WebView错误

时间:2015-12-02 10:25:32

标签: android android-fragments webview

此代码在Activity中正常运行,但相同的代码在Fragments中无效。它会导致ProgressDialog错误无法应用而另一个错误无法解决方法onBackPressed()

public class FacebookFragment extends Fragment {

private WebView webView;
public FacebookFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView=  inflater.inflate(R.layout.fragment_facebook, container, false);





    webView = (WebView)rootView. findViewById(R.id.webView1);

    startWebView("https://betanews.in/");
    return rootView;
}
private void startWebView(String url) {

    //Create new webview Client to show progress dialog
    //When opening a url or click on link

    webView.setWebViewClient(new WebViewClient() {
        ProgressDialog progressDialog;

        //If you will not use this method url links are opeen in new brower not in webview
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

        //Show loader on url load
        public void onLoadResource (WebView view, String url) {
            if (progressDialog == null) {
                // in standard case YourActivity.this
                progressDialog = new ProgressDialog(FacebookFragment.this);
                progressDialog.setMessage("Loading...");
                progressDialog.show();
            }
        }
        public void onPageFinished(WebView view, String url) {
            try{
                if (progressDialog.isShowing()) {
                    progressDialog.dismiss();
                    progressDialog = null;
                }
            }catch(Exception exception){
                exception.printStackTrace();
            }
        }

    });

    // Javascript inabled on webview
    webView.getSettings().setJavaScriptEnabled(true);

    // Other webview options
    /*
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    webView.setScrollbarFadingEnabled(false);
    webView.getSettings().setBuiltInZoomControls(true);
    */

    /*
     String summary = "<html><body>You scored <b>192</b> points.</body></html>";
     webview.loadData(summary, "text/html", null);
     */

    //Load url in webview
    webView.loadUrl(url);


}

// Open previous opened link from history on webview when back button pressed


@Override
// Detect when the back button is pressed
public void onBackPressed() {
    if(webView.canGoBack()) {
        webView.goBack();
    } else {
        // Let the system handle the back button
        super.onBackPressed();
    }

}

}

1 个答案:

答案 0 :(得分:0)

  1. 将此行progressDialog = new ProgressDialog(FacebookFragment.this);替换为progressDialog = new ProgressDialog(getActivity());
  2. 我们需要将上下文传递给ProgressDialog构造函数, FacebookFragment.this 将返回 Fragment 的对象,但是预期的对象是活动,您可以获得持有活动的上下文

    1. onBackPressed()是来自活动类的方法,但是您在这里扩展片段
    2. 覆盖此方法,您实际上会膨胀此片段。并检查所需片段的实例ID,然后执行这些操作。

      希望对你有所帮助