12

アプリが表示されているときに画面をオフにするたびに、InputConnectionWrapper の警告が表示されます。使ってないからわからないけどInputConnection

LogCat の出力は次のとおりです。

09-07 14:21:31.716: W/IInputConnectionWrapper(24197): getExtractedText on inactive InputConnection
09-07 14:21:31.724: W/IInputConnectionWrapper(24197): getExtractedText on inactive InputConnection
09-07 14:21:31.724: W/IInputConnectionWrapper(24197): getTextBeforeCursor on inactive InputConnection
09-07 14:21:31.724: W/IInputConnectionWrapper(24197): getTextAfterCursor on inactive InputConnection
09-07 14:21:31.724: W/IInputConnectionWrapper(24197): getExtractedText on inactive InputConnection
09-07 14:21:31.724: W/IInputConnectionWrapper(24197): getTextBeforeCursor on inactive InputConnection
09-07 14:21:31.724: W/IInputConnectionWrapper(24197): getTextAfterCursor on inactive InputConnection
09-07 14:21:31.732: W/IInputConnectionWrapper(24197): beginBatchEdit on inactive InputConnection
09-07 14:21:31.732: W/IInputConnectionWrapper(24197): endBatchEdit on inactive InputConnection
09-07 14:21:31.732: W/IInputConnectionWrapper(24197): getExtractedText on inactive InputConnection
09-07 14:21:31.732: W/IInputConnectionWrapper(24197): getTextBeforeCursor on inactive InputConnection
09-07 14:21:31.732: W/IInputConnectionWrapper(24197): getTextAfterCursor on inactive InputConnection
09-07 14:21:31.732: W/IInputConnectionWrapper(24197): beginBatchEdit on inactive InputConnection
09-07 14:21:31.732: W/IInputConnectionWrapper(24197): endBatchEdit on inactive InputConnection
09-07 14:21:31.732: W/IInputConnectionWrapper(24197): getExtractedText on inactive InputConnection
09-07 14:21:32.013: W/IInputConnectionWrapper(24197): showStatusIcon on inactive InputConnection
09-07 14:21:32.013: W/IInputConnectionWrapper(24197): getExtractedText on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): getExtractedText on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): getTextBeforeCursor on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): getTextAfterCursor on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): getExtractedText on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): getTextBeforeCursor on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): getTextAfterCursor on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): beginBatchEdit on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): endBatchEdit on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): getExtractedText on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): getTextBeforeCursor on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): getTextAfterCursor on inactive InputConnection
09-07 14:21:32.028: W/IInputConnectionWrapper(24197): beginBatchEdit on inactive InputConnection
09-07 14:21:32.028: W/IInputConnectionWrapper(24197): endBatchEdit on inactive InputConnection
09-07 14:21:32.028: W/IInputConnectionWrapper(24197): getExtractedText on inactive InputConnection
4

5 に答える 5

0

ボタンレイアウトの私の場合、これを持っていました: android:textIsSelectable="true"、それを削除するだけで問題は解決しました...

于 2016-11-08T20:13:08.980 に答える
0

もう手遅れだと思いますが、私の場合、テキスト編集で「setOnEditorActionListener」があることが問題です。このリスナーを削除すると、警告はなくなります。

于 2016-02-29T15:35:49.917 に答える
-7

InputConnectionWrapper上記の の使用法は完全に正しいことが判明しました。ただし、commitText()入力中に使用される他のメソッドがあるため、gets が呼び出されることはありません (特殊な場合を除く)。これらは主にsetComposingText()sendKeyEvent()です。

deleteSurroundingText()ただし、同様の問題に遭遇したため、めったに使用されないメソッドをオーバーライドするかcommitText()、すべてのユーザー入力を確実にキャッチすることも重要です。

私の状況:EditTextユーザーが入力するビューがあります。EditTextユーザーがボタンを押すと、 はクリアされます。ボタンをすばやく押すと、多くの非アクティブなInputConnectionエントリが流出します。

例えばeditText.setText(null);

上記のログキャットの最後の行は、何が起こっているかをよく示しています。案の定、InputConnectionはテキストを消去する要求で圧倒されています。クリアする前に、テキストの長さをチェックするようにコードを変更してみました。

if (editText.length() > 0) {
    editText.setText(null);
}

IInputConnectionWrapperこれにより、ボタンをすばやく押しても警告が流れなくなり、問題が軽減されます。ただし、ユーザーが何かを入力してボタンを押すことをすばやく切り替えたり、アプリに十分な負荷がかかっているときにボタンを押したりすると、これでも問題が発生しやすくなります。

幸いなことに、テキストを消去する別の方法を見つけましたEditable.clear()。これにより、警告はまったく表示されません。

if (editText.length() > 0) {
    editText.getText().clear();
}

テキスト (autotext、autocap、multitap、undo) だけでなく、すべての入力状態をクリアしたい場合は、 を使用できますTextKeyListener.clear(Editable e)

if (editText.length() > 0) {
    TextKeyListener.clear(editText.getText());
}

入力接続ラッパーについて詳しく知りたい場合は、以下のリンクにアクセスしてください。

http://developer.android.com/reference/android/view/inputmethod/InputConnection.html

于 2014-03-27T12:35:08.360 に答える