2010-07-08 19 views
5

Aşağıdaki kodu kullanıyorumAndroid Webview yükleme iletişim kutusu kapatılmadı

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'da bir bağlantıyı tıklattığımda, iletişim kutusu belirir ve sayfa yüklenmeye başlar, ancak sayfa bittiğinde, iletişim kutusu hala ekranda kalır. Açıkçası kod yeterince basit, ama bunu anlayamıyorum. Ayrıca, tıklanan bağlantıların birkaç yönlendirmeye sahip olduğunu eklemeliyim, ancak bunun burada neden olup olmadığından emin değilim.

Bunu nasıl yapabilirim?

+0

'onPageFinshed' yok! –

cevap

3

Steven & Sander, böyle bir İşleyicisi'ndeki

Something ilerleme iletişim kutusu kapatıldıktan deneyin:

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

Ardından onPageFinished daki işleyicisi çağırır:

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

& bitirdiniz!

3

@Override ek açıklamalarını kaçırdınız.

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

Bu kod çalışır, ancak ilerleme iletişim does't başlangıç ​​yükleme görünür: Burada

doğru kodudur. Eğer gerekirse, sınıf kurucusuna bu kodu ekleyin:

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

@Override yalnızca derleyiciye gönderilen bir mesajdır, kodun işlevselliği üzerinde hiçbir etkisi yoktur. – satur9nine

1

Bu iş, yani Biten yanlış yazıldığından , yazdığın aynı sorunu yaşıyor

+0

Sabit, başınız için teşekkürler –

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

    } 
} 
İlgili konular