2012-07-02 8 views
59

私はWebViewのにURLをロードしています:アンドロイドのwebviewにURLを読み込んでいるときに進行状況を表示する方法は?

WebView webview=(WebView)findViewById(R.id.webview); 
webview.loadUrl(url); 

それはURLをロードするためにいくつかの時間を取って、それは空白の画面を示している間。私は、URLのロード中にプログレスダイアログを表示したい:

ProgressDialog dialog = ProgressDialog.show(this, "HI","Loading......", true); 

しかし、上記のコードが動作していないです。アイデアがあれば、お手伝いください。前もって感謝します。

+0

可能な重複する必要があります。http://stackoverflow.com/questions/3149216/how-to-listen-for-a-webview-仕上げロードa-url – LarsH

答えて

112

は、あなたのWebViewにWebViewClientを設定し、あなたの進行状況ダイアログはあなたにonCreate()方法を開始ANページはonPageFinished(WebView view, String url)

import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.ProgressDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Window; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.Toast; 

public class Main extends Activity { 
    private WebView webview; 
    private static final String TAG = "Main"; 
    private ProgressDialog progressBar; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     requestWindowFeature(Window.FEATURE_NO_TITLE); 

     setContentView(R.layout.main); 

     this.webview = (WebView)findViewById(R.id.webview); 

     WebSettings settings = webview.getSettings(); 
     settings.setJavaScriptEnabled(true); 
     webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 

     final AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 

     progressBar = ProgressDialog.show(Main.this, "WebView Example", "Loading..."); 

     webview.setWebViewClient(new WebViewClient() { 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       Log.i(TAG, "Processing webview url click..."); 
       view.loadUrl(url); 
       return true; 
      } 

      public void onPageFinished(WebView view, String url) { 
       Log.i(TAG, "Finished loading URL: " +url); 
       if (progressBar.isShowing()) { 
        progressBar.dismiss(); 
       } 
      } 

      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       Log.e(TAG, "Error: " + description); 
       Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show(); 
       alertDialog.setTitle("Error"); 
       alertDialog.setMessage(description); 
       alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         return; 
        } 
       }); 
       alertDialog.show(); 
      } 
     }); 
     webview.loadUrl("http://www.google.com"); 
    } 
} 
で読み込みが完了したときにそれを却下します

あなたのmain.xmlレイアウト

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <WebView android:id="@string/webview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" /> 
</LinearLayout> 
+1

いい例のおかげで、あなたは私の日を救った! – lakshman

1

WebViewClientクラスを拡張することによって、WebView用に独自のWebViewClientを設定する必要があります。

onPageStarted(ここに表示)とonPageFinished(ここで終了)の2つのメソッドを実装する必要があります。このトピックの

詳しい案内は、Googleの中に見つけることができますWebView tutorial

3

samplをチェック電子コード。それはあなたを助ける。

private ProgressBar progressBar; 
progressBar=(ProgressBar)findViewById(R.id.webloadProgressBar); 
WebView urlWebView= new WebView(Context); 
    urlWebView.setWebViewClient(new AppWebViewClients(progressBar)); 
         urlWebView.getSettings().setJavaScriptEnabled(true); 
         urlWebView.loadUrl(detailView.getUrl()); 

public class AppWebViewClients extends WebViewClient { 
    private ProgressBar progressBar; 

    public AppWebViewClients(ProgressBar progressBar) { 
     this.progressBar=progressBar; 
     progressBar.setVisibility(View.VISIBLE); 
    } 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     // TODO Auto-generated method stub 
     view.loadUrl(url); 
     return true; 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     // TODO Auto-generated method stub 
     super.onPageFinished(view, url); 
     progressBar.setVisibility(View.GONE); 
    } 
} 

ありがとうございます。

+0

ProgressBarの可視性をGONEに設定するのは間違っています。ビューはView Stackから削除されなければなりません。 – Tim

8

あなたが乗るonPageStartedとonPageFinishedコールバックを超える

mWebView.setWebViewClient(new WebViewClient() { 

     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      if (progressBar!= null && progressBar.isShowing()) { 
       progressBar.dismiss(); 
      } 
      progressBar = ProgressDialog.show(WebViewActivity.this, "Application Name", "Loading..."); 
     } 

     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 

      return true; 
     } 

     public void onPageFinished(WebView view, String url) { 
      if (progressBar.isShowing()) { 
       progressBar.dismiss(); 
      } 
     } 

     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
      alertDialog.setTitle("Error"); 
      alertDialog.setMessage(description); 
      alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        return; 
       } 
      }); 
      alertDialog.show(); 
     } 
    }); 
-1
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
     alertDialog.setTitle("Error"); 
     alertDialog.setMessage(description); 
     alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       return; 
      } 
     }); 
     alertDialog.show(); 
    } 
}); 
関連する問題