2017-11-17 8 views
0

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

答えて

0

問題は、私はonPauseメソッドをオーバーライドして、すべての時間はNFCが、それはUIが完全に一時停止させると、私はまたWebViewのonPause呼んでいた、このメソッドを呼び出して検出されたということでした。 MainActivityでは、ジオロケーション、プッシュ通知などのトリガーが複数あり、NFCトリガーを除いて正常に機能していました。 他のすべてのアクティビティでonPauseを呼び出すアクティビティでNFCが検出されたようです。私はどんな意図

@Override 
protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 
    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) { 
     //Handles nfc and sends broadcast 
    } else if (Constants.INTENT_PUSH_NOITIFICATION.equals(intent.getAction())) { 
     //Handles notification and sends broadcast 
} 
をキャッチするOnNewIntent()メソッドを使用していたMainActivityでも

@Override 
protected void onPause() { 
    super.onPause(); 
    webView.onPause(); 
} 

関連する問題