2010-07-08 31 views
5

Tôi đang sử dụng đoạn mã sauAndroid WebView tải hộp thoại không được sa thải

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

} 

Khi tôi bấm vào một liên kết trong WebView, hộp thoại xuất hiện và trang bắt đầu tải, tuy nhiên khi trang được tải xong, hộp thoại vẫn còn trên màn hình. Rõ ràng mã là đủ đơn giản, nhưng tôi không thể tìm ra điều này. Ngoài ra, tôi đoán tôi nên thêm rằng các liên kết được nhấp vào có một vài chuyển hướng, nhưng tôi không chắc chắn nếu đó là liên quan đến nguyên nhân ở đây.

Tôi làm cách nào để thực hiện việc này?

+0

có cùng một vấn đề! –

Trả lời

3

Steven & Sander, hãy thử gạt bỏ hộp thoại tiến triển trong một Handler

Something như thế này:

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

Sau đó gọi xử lý của bạn trong onPageFinished:

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

& bạn đã xong!

3

Bạn đã bỏ lỡ chú thích @Override.

Đây là mã đúng:

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

Mã này hoạt động, nhưng hộp thoại tiến trình does't xuất hiện trên tải ban đầu. Nếu bạn cần, thêm mã này vào lớp constructor:

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

@Override chỉ là một thông báo cho trình biên dịch, nó không ảnh hưởng đến chức năng của mã. – satur9nine

1

này làm việc, bạn đánh vần Hoàn sai, bạn đã viết 'onPageFinshed'

+0

Đã sửa lỗi, cảm ơn những người đứng đầu –

1
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(); 
     } 

    } 
} 
Các vấn đề liên quan