开发者

Android Webview loading dialog not being dismissed

I am using the following code

class CustomWebViewClient extends WebViewClient {
    Context context;
    ProgressDialog pd = null;


    public CustomWebViewClient (Context c){
        context = c;
    }

    public void onPageFinished(WebView view, String url){
        pd.dismiss();
    }



    public boolean shouldOverrideUrlLoading(final WebView view, final String url) {
        pd = ProgressDialog.show(context, "", "pageload. Please wait...", true);


        view.loadUrl(url);  

        return true;
    } 

}

When I click a link in the WebView, the dialog appears and the page begins to load, however when the page is finished loading, the dialog is still on the screen. Obviously the code is simple enough, but I cant figure this out. Also, I guess I should add that the links being clicked have a few redirects, but I am not sure if that is rel开发者_如何学Cated to the cause here.

How can I do this right?


Steven & Sander, try dismissing the progress dialog in a Handler

Something like this:

  class pdHandler extends Handler {
    @Override
    public void handleMessage(Message msg) {
      if(pd != null)
      {
      pd.dismiss();
      pd = null;
      }
    }

Then call your handler in onPageFinished:

 public void onPageFinshed(WebView view, String url){
        pdHandler.sendEmptyMessage(0);
    }

& you are done!


You missed @Override annotation.

Here is right code:

class CustomWebViewClient extends WebViewClient {
    Context context;
    ProgressDialog pd = null;

    public CustomWebViewClient(Context c){
        context = c;
    }

    @Override
    public void onPageFinished(WebView view, String url){
        if (pd != null && pd.isShowing())
        {
            pd.dismiss();
        }
    }

    @Override
    public boolean shouldOverrideUrlLoading(final WebView view, final String url) {
        pd = ProgressDialog.show(context, "", "pageload. Please wait...", true);
        view.loadUrl(url);  
        return true;
    } 
}

This code works, but progress dialog does't appears on initial loading. If you need it, add this code to the class' constructor:

pd = ProgressDialog.show(context, "", "pageload. Please wait...", true);


This does work, you spelled Finished wrong, you wrote "onPageFinshed"


public class WebDialog extends Dialog
{

    static final int                      BLUE                  = 0xFF6D84B4;
    static final float[]                  DIMENSIONS_DIFF_LANDSCAPE =
                                                                    { 20, 60 };
    static final float[]                  DIMENSIONS_DIFF_PORTRAIT  =
                                                                    { 40, 60 };
    static final FrameLayout.LayoutParams   FILL                    = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT);
    static final int                      MARGIN                    = 4;
    static final int                      PADDING                   = 2;
    static final String                   DISPLAY_STRING            = "touch";

    private String                        mUrl;
//  private DialogListener                mListener;
    private ProgressDialog                mSpinner;
    private WebView                       mWebView;
    private LinearLayout                  mContent;
    private TextView                      mTitle;

    public WebDialog(Context context, String url)
    {
        super(context);
        mUrl = url;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        mSpinner = new ProgressDialog(getContext());
        mSpinner.requestWindowFeature(Window.FEATURE_NO_TITLE);
        mSpinner.setMessage("Loading...");

        mContent = new LinearLayout(getContext());
        mContent.setOrientation(LinearLayout.VERTICAL);
        setUpTitle();
        setUpWebView();
        Display display = getWindow().getWindowManager().getDefaultDisplay();
        final float scale = getContext().getResources().getDisplayMetrics().density;
        int orientation = getContext().getResources().getConfiguration().orientation;
        float[] dimensions = (orientation == Configuration.ORIENTATION_LANDSCAPE) ? DIMENSIONS_DIFF_LANDSCAPE : DIMENSIONS_DIFF_PORTRAIT;
        addContentView(mContent, new LinearLayout.LayoutParams(display.getWidth() - ((int) (dimensions[0] * scale + 0.5f)), display.getHeight() - ((int) (dimensions[1] * scale + 0.5f))));
    }

    private void setUpTitle()
    {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        Drawable icon = getContext().getResources().getDrawable(R.drawable.ic_launcher);
        mTitle = new TextView(getContext());
        mTitle.setText("Website");
        mTitle.setTextColor(Color.WHITE);
        mTitle.setTypeface(Typeface.DEFAULT_BOLD);
        mTitle.setBackgroundColor(BLUE);
        mTitle.setPadding(MARGIN + PADDING, MARGIN, MARGIN, MARGIN);
//      mTitle.setCompoundDrawablePadding(MARGIN + PADDING);
//      mTitle.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
        mContent.addView(mTitle);
    }

    private void setUpWebView()
    {
        mWebView = new WebView(getContext());
        mWebView.setVerticalScrollBarEnabled(false);
        mWebView.setHorizontalScrollBarEnabled(false);
        mWebView.setWebViewClient(new WebDialog.DialogWebViewClient());
        mWebView.getSettings().setJavaScriptEnabled(true);

        System.out.println(" mURL = "+mUrl);

        mWebView.loadUrl(mUrl);
        mWebView.setLayoutParams(FILL);
        mContent.addView(mWebView);
    }

    private class DialogWebViewClient extends WebViewClient
    {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url)
        {
            view.loadUrl(url);

            return true;
        }

        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
        {
            super.onReceivedError(view, errorCode, description, failingUrl);
            WebDialog.this.dismiss();
        }

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

        @Override
        public void onPageFinished(WebView view, String url)
        {
            super.onPageFinished(view, url);
            String title = mWebView.getTitle();
            if (title != null && title.length() > 0)
            {
                mTitle.setText(title);
            }
            mSpinner.dismiss();
        }

    }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜