2010-07-08 19 views
5

estoy usando el siguiente códigoAndroid Webview carga no de diálogo que se desestimó

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

} 

Al hacer clic en un enlace en la vista Web, aparece el cuadro de diálogo y la página comienza a cargar, sin embargo cuando la página haya terminado de cargarse, el diálogo aún está en la pantalla. Obviamente, el código es bastante simple, pero no puedo resolverlo. Además, supongo que debería agregar que los enlaces que se hacen clic tienen algunos redireccionamientos, pero no estoy seguro si eso está relacionado con la causa aquí.

¿Cómo puedo hacer esto bien?

+0

tener el mismo problema! –

Respuesta

3

Steven & Sander, intente despedir el diálogo de progreso en un manejador

Algo como esto:

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

Entonces llame a su manejador en onPageFinished:

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

& ya está!

3

Olvidó la anotación @Override.

Aquí es código correcto:

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

funciona este código, pero el progreso del does't de diálogo aparece en la carga inicial. Si lo necesita, agregue este código al constructor de la clase:

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

El @Override es simplemente un mensaje para el compilador, no tiene ningún efecto sobre la funcionalidad del código. – satur9nine

1

Esto funciona, deletreó mal terminado, que escribió 'onPageFinshed'

+0

Reparado, gracias por el aviso –

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

    } 
} 
Cuestiones relacionadas