简体   繁体   中英

progress bar for a webview in fragment view

i am trying to make a app for android in eclipse. where i different fragments with webviews in it. but i want to show a progress bar when webview in loading but i could not getting it how to do it i checked many tutorials but failed to do so. let me most activity code here.

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.app.Fragment;
import android.annotation.SuppressLint;
//import android.graphics.Bitmap;
//import android.widget.ProgressBar;
//import android.app.ProgressDialog;
//import android.app.Activity;


@SuppressLint("SetJavaScriptEnabled")
public class AdminTab1 extends Fragment {
     private WebView webView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        setHasOptionsMenu(true);
        View rootView = inflater.inflate(R.layout.admintab1, container, false);
    webView = (WebView) rootView.findViewById(R.id.webView1);
    webView.setWebViewClient(new WebViewClient());
    webView.setScrollbarFadingEnabled(false);  
    webView.setHorizontalScrollBarEnabled(false);  
    webView.getSettings().setJavaScriptEnabled(true);  
    webView.getSettings().setUserAgentString("AndroidWebView");  
    webView.clearCache(true);
    webView.loadUrl("http://ww.google.com"); 
    return rootView;
    }

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.mainmenu, menu);
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.item1:
                webView.reload();
                break;
            case R.id.item2:
                webView.goBack();
               break;
            default:
               break;
        }
        return true;
    } 
}

You should try this

public class About27Fragment extends Fragment{

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    View rootView = inflater.inflate(R.layout.about_27, container, false);

    final WebView webView = (WebView) rootView.findViewById(R.id.webView_about27);
    final ProgressDialog dialog = ProgressDialog.show(getActivity(), "", "Please wait, Loading Page...", true);


    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.getSettings().setBuiltInZoomControls(true);

    webView.setWebViewClient(new WebViewClient() {

        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {}

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon){
            dialog.show();
        }

        @Override
        public void onPageFinished(WebView view, String url){
            dialog.dismiss();
            String webUrl = webView.getUrl();
        }


    });

    webView.loadUrl("https://www.google.com.mx");

    return rootView;
}

}

WebViewClient has a lot of callback. You should subclass it and override onPageStarted to show and onPageFinished to dismiss it, for instance. Take a look to the doc, here

 private class MyWebClient extends WebViewClient {
      @Override
      public void onPageStarted(WebView view, String url, 
         // here show the dialog
      }
      public void onPageFinished(WebView view, String url) {
         // here dismiss it
      }
 }

and in onCreateView use it like

 webView.setWebViewClient(new MyWebClient());

oncreate

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.web_view);

web_view = (WebView) findViewById(R.id.web_view);
pd = new ProgressDialog(Activity.this);
pd.setMessage("Please wait Loading...");
pd.show();
web_view.setWebViewClient(new MyWebViewClient());
web_view.loadUrl("ur site name");
}

WebViewClient

private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);

if (!pd.isShowing()) {
    pd.show();
}

return true;
}

@Override
public void onPageFinished(WebView view, String url) {
System.out.println("on finish");
if (pd.isShowing()) {
    pd.dismiss();
}
}

In this way you can implement Progress Dialog in webview.

Try this to get progress in percentage

myWebView.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress) {
                // Activities and WebViews measure progress with different
                // scales
                //Updaate progress bar here with progress int
            }

        });

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM