loadUrl()で新しいURLを読み込むと、タイトルが変更され、新しいWebページがロードされているように見えますが、ビューが停止しています。ビューはちょうど凍っています。 これは、新しいURLがNFCタグからロードされた場合にのみ発生します。これはwebviewが完全に機能する以外は非常に奇妙な動作です。私はMainActivityが新しいURLでWebViewActivityにブロードキャストを送信するアクティビティを持っていなければならないが、その後はビューが止まっているので、UIThreadでメソッドを呼び出そうとしたが動作しなかった。新しいURLをロードするときにWebviewがスタックされる
ここでwebViewの設定を示します。webclientクライアントとchromeクライアントも最後のコードブロックで宣言されています。
public void setupWebView() {
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setDisplayZoomControls(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webView.setWebViewClient(webViewClient);
webView.setWebChromeClient(webChromeClient);
}
loadUrl()メソッドを呼び出す方法は次のとおりです。broadCastReceiverはNFCインテントを処理します。
private WebViewClient webViewClient = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
webView.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
progressContainer.setVisibility(View.GONE);
}
};
private WebChromeClient webChromeClient = new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
titleView.setText(view.getTitle());
}
};
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
loadNewUrl(intent);
}
};
public void loadNewUrl(Intent i) {
String fullUrl = i.getExtras().getString(Constants.WEB_URL, "");
progressContainer.setVisibility(View.VISIBLE);
webView.post(new Runnable() {
@Override
public void run() {
webView.loadUrl(fullUrl);
}
});
}