【问题标题】:Android Webview loading dialog not being dismissedAndroid Webview加载对话框没有被关闭
【发布时间】:2010-07-08 15:11:03
【问题描述】:

我正在使用以下代码

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;
    } 

}

当我单击 WebView 中的链接时,会出现对话框并开始加载页面,但是当页面完成加载时,对话框仍在屏幕上。显然代码很简单,但我无法弄清楚。另外,我想我应该补充一点,被点击的链接有一些重定向,但我不确定这是否与这里的原因有关。

我怎样才能做到这一点?

【问题讨论】:

  • 遇到同样的问题!

标签: java android webview progressdialog


【解决方案1】:

Steven 和 Sander,尝试在 Handler 中关闭进度对话框

类似这样的:

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

然后在 onPageFinished 中调用你的处理程序:

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

&你完成了!

【讨论】:

    【解决方案2】:

    您错过了@Override 注释。

    这是正确的代码:

    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;
        } 
    }
    

    此代码有效,但初始加载时不显示进度对话框。如果需要,请将此代码添加到类的构造函数中:

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

    【讨论】:

    • @Override 只是给编译器的一条消息,它对代码的功能没有影响。
    【解决方案3】:

    这确实有效, 你拼写错了,你写的是“onPageFinshed”

    【讨论】:

      【解决方案4】:
      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();
              }
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-23
        • 1970-01-01
        相关资源
        最近更新 更多