私は最近この問題に遭遇しましたが、私の場合、第2のバグ修正がこの問題を引き起こしていることがわかりました。
webviewを拡張するカスタムクラスを作成しなかった場合は、このandroid bug reportの提案のためにonCheckIsTextEditorが常にtrueを返すようにオーバーライドされます...ここでは読まなくなります。
これを実行すると、HTCによってこの修正が既に実装されているように見え、何らかの原因でフォーカスを受けたときにクラッシュするように見えます。この問題は、ビューにタッチイベントを配置し、ビューの可視性を設定することで、私にとって2つの場所に現れました。私のプロジェクトでは、WebViewClientを設定して、ページがロード完了するまで待ってから、webviewの可視性を可視に設定しました。私はタッチイベントを上書きするかべきではないかどうかを判断することができたのtry/catchでsetVisibility呼び出しをラップすることによって
java.lang.NullPointerException at android.webkit.WebView.navHandledKey(WebView.java:9353)
at android.webkit.WebView.requestFocus(WebView.java:7910)
at android.view.View.requestFocus(View.java:3718)
at android.view.View.requestFocus(View.java:3696)
at android.view.ViewRoot.focusableViewAvailable(ViewRoot.java:1803)
at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:474)
at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:474)
at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:474)
at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:474)
at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:474)
at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:474)
at android.view.View.setFlags(View.java:4680)
at android.view.View.setVisibility(View.java:3163)
:これは、次のスタックトレースを引き起こしました。私がイベントをキャッチした場合、それは無効にする必要があります。これは私がやったことの一例です:
マイカスタムWebViewが次のようになります
try {
webView.setVisibility(View.VISIBLE);
} catch (NullPointerException e) {
Log.i(TAG, "Error setting webview visibility due to overriding focus. It will be disabled.");
webView.setOverrideOnCheckIsTextEditor(false);
// Confirm window is visible
webView.setVisibility(View.VISIBLE);
}
、最後の二つの方法に支払わ特別な注意:私はについて詳細に行くことができない
/**
* When using a webview in a dialog, there are issues relating to the keyboard not appearing when focusing on a text box.
* This overrides a function to ensure the keyboard is shown when focusing on a text box in a webview.
* See link for bug report and solution.
*
* @see http://code.google.com/p/android/issues/detail?id=7189
* @see http://stackoverflow.com/questions/12325720
* @author James O'Brien
* @since 10/16/2012
*/
public class FocusableWebView extends WebView {
private boolean mOverrideCheckIsTextEditor = true;
/**
* Default Constructor
*
* @param context
*/
public FocusableWebView(Context context) {
super(context);
}
/**
* Default Constructor
*
* @param context
* @param attrs
*/
public FocusableWebView(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* Default Constructor
*
* @param context
* @param attrs
* @param defStyle
*/
public FocusableWebView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onCheckIsTextEditor() {
if (mOverrideCheckIsTextEditor) {
return true;
} else {
return super.onCheckIsTextEditor();
}
}
/**
* Enable/Disable overriding of onCheckIsTextEditor to always return true.
*/
public void setOverrideOnCheckIsTextEditor(boolean foo) {
mOverrideCheckIsTextEditor = foo;
}
}
申し訳ありませんなぜこれが問題を解決するのか。私が引き受けることができるすべては、その関連が集中し、動的にそれが御馳走に動作不能にするということです:)
**更新(12/11/12)**
は、上記の両方の問題を解決するために管理。それはwebviewの焦点に問題があるようでした。私のコードは、今私はあなたが明示的に「真」またはsetFocusableを呼び出す(真)にフォーカス可能な属性を設定することを確認することを示唆している。この
webView.setVisibility(View.VISIBLE);
webView.setFocusable(true);
webView.requestFocus();
のように見えます。
Androidのリリースまたはデバイスメーカーのパターンはありますか? – CommonsWare
面白い観察!それはHTCデバイスに限定されているようです! – PacificSky
HTCタグを追加しました。これは、HTCの支援を受ける可能性があるためです。私は再現可能なテストケースを持っていないと仮定します - 正しい? – CommonsWare