Pages

2011年12月28日

【Android】WebViewで読み込み中にダイアログを表示する(2)

以前、WebViewで読み込み中にダイアログを表示するという記事を紹介しました。
が、実際にそのままリリースしたところ、BadTokenExceptionが3件、エラー報告として上がって来ましたので、
改訂版を紹介いたします。


package名は各自変更をお願いします。

MyWebView.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.shonanshachu.webclient;
 
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.webkit.WebView;
import android.webkit.WebViewClient;
 
public class MyWebViewClient extends WebViewClient{
    private ProgressDialog progress;
 
    public MyWebViewClient(Context context){
        super();
        progress = new ProgressDialog(context);
        progress.setMessage("Now Loading...");
    }
 
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        progress.show();
    }
 
    public void onPageFinished(WebView view, String url){
        if(progress != null && progress.isShowing()){
            progress.dismiss();
        }
        progress = null;
    }
}

前回との変更は、まずコンストラクタの引数にContextが付いていること。
次に、progressをコンストラクタで宣言している点になります。

まず、Contextに関してですが、前回は
1
2
3
4
5
public void onPageStarted(WebView view, String url, Bitmap favion){
  progress = new ProgressDialog(view.getContext());
  progress.setMessage(message);
  progress.show();
}

としておりました。
問題はview.getContext()時に発生。
getContext()で呼ばれるContextではなく、Activityを指定する必要があります。
なので、コンストラクタで指定しております。

呼び出し方は

ActivityMain.java

1
2
WebView wv = (WebView)findViewById(R.id.web_view);
wv.setWebViewClient(new MyWebViewClient(this));

wvはグローバル変数にしておりますが、わかりやすくローカルで書いています。
この2行をonCreate()で呼んで完成です。
wv.loadUrl()は別の関数内なので、wvはグローバルの方が良いと思います。

改訂版を使用しているClick2Goをよろしくお願いします。

0 件のコメント:

コメントを投稿