首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >安卓系统上的getExtractedText on inactive InputConnection警告

安卓系统上的getExtractedText on inactive InputConnection警告
EN

Stack Overflow用户
提问于 2011-11-14 21:56:16
回答 9查看 106.1K关注 0票数 142

我在我的logcat中得到了以下警告。

代码语言:javascript
复制
getExtractedText on inactive InputConnection

我找不到背后的原因。请帮帮忙

EN

回答 9

Stack Overflow用户

发布于 2013-04-01 01:51:23

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

代码语言:javascript
复制
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视图。当用户按下按钮时,EditText将被清除。当我快速按下按钮时,大量非活动的InputConnection条目会源源不断地流出。

例如:

代码语言:javascript
复制
editText.setText(null);

上面的logcat中的最后一行很好地说明了正在发生的事情。果然,清除文本的请求让InputConnection应接不暇。在尝试清除文本之前,我尝试修改代码以检查文本长度:

代码语言:javascript
复制
if (editText.length() > 0) {
    editText.setText(null);
}

这有助于缓解这个问题,因为快速按下按钮不再导致IInputConnectionWrapper警告流。然而,当用户在输入内容和按下按钮或在应用程序处于足够负载时按下按钮等之间快速交替时,这仍然容易出现问题。

幸运的是,我找到了另一种清除文本的方法:Editable.clear()。这样,我就不会收到任何警告:

代码语言:javascript
复制
if (editText.length() > 0) {
    editText.getText().clear();
}

请注意,如果您希望清除所有输入状态,而不仅仅是文本(autotext、autocap、multitap、undo),您可以使用TextKeyListener.clear(Editable e)

代码语言:javascript
复制
if (editText.length() > 0) {
    TextKeyListener.clear(editText.getText());
}
票数 46
EN

Stack Overflow用户

发布于 2014-03-06 19:49:52

我也有同样的问题。当我的一台EditTexts中的软键盘被激活,并且活动失去焦点时,将出现警告。

我所做的是将键盘隐藏在onPause()中;

代码语言:javascript
复制
@Override
protected void onPause() {

    // hide the keyboard in order to avoid getTextBeforeCursor on inactive InputConnection
    InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

    inputMethodManager.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

    super.onPause();
}
票数 9
EN

Stack Overflow用户

发布于 2015-04-06 19:20:40

除了antoniom的回答之外,确保任何需要做的进一步操作都是在隐藏键盘之后真正完成的,所以如果你像下面这样隐藏了键盘:

代码语言:javascript
复制
public void hideKeyboard() {
InputMethodManager inputMethodManager =(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);
}

,您需要在隐藏键盘后执行后续操作,如下所示:

代码语言:javascript
复制
getWindow().getDecorView().post(new Runnable() {            
        @Override
        public void run() {
            finish(); //Sample succeeding code
     }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8122625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档