2010-07-08 12 views
5

entlassen Ich verwende den folgenden CodeAndroid Webview Laden Dialog nicht

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

} 

Wenn ich einen Link in der WebView klicken, wird das Dialogfeld angezeigt wird und die Seite zu laden beginnt, aber wenn die Seite fertig geladen ist, Der Dialog ist immer noch auf dem Bildschirm. Offensichtlich ist der Code einfach genug, aber ich kann das nicht herausfinden. Außerdem sollte ich hinzufügen, dass die angeklickten Links ein paar Umleitungen haben, aber ich bin mir nicht sicher, ob das hier mit der Ursache zusammenhängt.

Wie kann ich das richtig machen?

+0

das gleiche Problem! –

Antwort

3

Steven & Sander, versuchen, den Fortschrittsdialog in einem Handler entließ

Etwas wie folgt aus:

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

Dann rufen Sie Ihren Handler in onPageFinished:

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

& Sie fertig sind!

3

Sie haben @Override Annotation verpasst. Hier

ist rechts Code:

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

Dieser Code funktioniert, aber der Fortschritt Dialog does't beim erstmaligen Laden erscheint. Wenn Sie es benötigen, fügen Sie diesen Code in die Klasse Konstruktor:

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

Das @Override ist lediglich eine Nachricht an den Compiler, es hat keinen Einfluss auf die Funktionalität des Codes. – satur9nine

1

funktionierts, Sie Finished falsch geschrieben, schrieben Sie "onPageFinshed"

+0

Fest, danke für die Köpfe hoch –

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

    } 
}