getExtractedTexte如何处理在android上处于非活动状态的InputConnection警告?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (25)

我在logcat中收到以下警告:

getExtractedText on inactive InputConnection
提问于
用户回答回答于

我通过调用来解决这个问题:

hiddenKeyboardText.getText().clear();
hiddenKeyboardText.append("some string");

我在logcat中也收到了相同的消息,尽管我的情况稍有不同。我想读取进入EditText的每个字符,然后将有问题的EditText重置为默认的初始化字符串。

最初,我的onTextChanged(CharSequence s, ...)定义如下:

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    if (isResettingKeyboard)
        return;

    // ... do what needs to be done

    resetKeyboardString();

}

public void resetKeyboardString()
{
    isResettingKeyboard = true;

    hiddenKeyboardText.getText().clear();
    hiddenKeyboardText.setText(keyboardInitString);
    hiddenKeyboardText.setSelection(defaultKeyboardCursorLocation);

    isResettingKeyboard = false;
}

但是,回调afterTextChanged(Editable s)是设置文本的正确位置:

@Override
public void afterTextChanged(Editable s) {

    if (isResettingKeyboard)
        return;

    resetKeyboardString();

    // ... 
}
用户回答回答于

我遇到了类似的问题。我的logcat:

W/IInputConnectionWrapper(21214): getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper(21214): getSelectedText on inactive InputConnection
W/IInputConnectionWrapper(21214): getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper(21214): getTextAfterCursor on inactive InputConnection
...
I/Choreographer(20010): Skipped 30 frames!  The application may be doing too much work on its main thread.

例如:

editText.setText(null);

我尝试修改代码以检查文本长度:

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

然而我根本没有收到警告:

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

你还可以使用TextKeyListener.clear:

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

扫码关注云+社区