表題の通りなんだけれども。
最初全然気付かなかったんだけど、Ajax使ってるサイトとかで起きた。
WebViewClientを継承してロード中…みたいなProgressDialogを出そうと思ってやってみたら出来てたわけです。
しかし、YouTubeのサイトで画面タップしたら、いきなりエラーで落ちた。LogCat見たら、「onPageFinishedでpd.dismiss()ってやってるけど、ProgressDialogないよ!」って怒られてた。
ん?なんで一度onPageFinished終わってるのに再度呼ばれてるの?と疑問に思ったのだが、どうもAjaxでデータ取り終わった後にも呼ばれているっぽい。onPageStartedはAjax呼ばれた最初にはコールされないので、pdを初期化する処理が行われずに呼ばれるからエラーと。そうですか…。
ということで、以下のように改良。
public class HogeActivity extends Activity {
.
.
.
/**
* WebViewのロード中にプログレスダイアログを表示するクラス
*
*/
public class SimpleLoadingClient extends WebViewClient {
private ProgressDialog pd;
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
this.dismissDialog();
}
private void dismissDialog() {
if (pd != null) {
pd.dismiss();
pd = null;
}
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
this.dismissDialog();
pd = new ProgressDialog(HogeActivity.this);
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pd.setMessage(getString(R.string.now_loading));
pd.show();
}
}
}
pdがnullならdismissしないようにすると。
以上でーす。
