2010-07-08 5 views
5

Sto usando il seguente codiceAndroid Webview carico non dialogo viene respinto

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

} 

quando clicco un link nella WebView, viene visualizzata la finestra di dialogo e la pagina inizia a caricare, tuttavia quando la pagina viene terminato il caricamento, la finestra di dialogo è ancora sullo schermo. Ovviamente il codice è abbastanza semplice, ma non posso calcolare questo fuori. Inoltre, credo che dovrei aggiungere che i link viene cliccato hanno un paio di redirect, ma non sono sicuro se questo è legato alla causa qui.

Come posso fare questo giusto?

+0

avendo lo stesso problema! –

risposta

3

Steven & Sander, provare a chiudere la finestra di progresso in un Handler

Qualcosa di simile a questo:

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

Quindi chiamare il tuo gestore in onPageFinished:

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

& si è fatto!

3

vi siete persi @Override annotazione.

Ecco codice giusto:

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

Questo codice funziona, ma finestra di avanzamento does't appare sul caricamento iniziale. Se ne avete bisogno, aggiungere questo codice al costruttore della classe:

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

Il @Override è semplicemente un messaggio al compilatore, non ha alcun effetto sulla funzionalità del codice. – satur9nine

1

Questo funziona, aver scritto sbagliato finito, lei ha scritto 'onPageFinshed'

+0

fissi, grazie per il testa a testa –

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

    } 
}