首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >InputConnectionWrapper警告

InputConnectionWrapper警告
EN

Stack Overflow用户
提问于 2012-09-07 20:52:19
回答 4查看 39.4K关注 0票数 12

当我的应用程序可见时,我每次关闭屏幕时都会收到一个InputConnectionWrapper警告。我不知道为什么,因为我不使用InputConnection

这是LogCat的输出。

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2014-03-27 20:35:08

事实证明,上述InputConnectionWrapper的用法是完全正确的。但是,commitText()永远不会被调用(除了特殊情况),因为还有其他方法可以在输入过程中使用。它们主要是setComposingText()sendKeyEvent()

但是,覆盖很少使用的方法(如deleteSurroundingText()commitText() )以确保捕获每个用户输入也很重要,因为我遇到了类似的问题。

我的情况:我有一个用户输入的EditText视图。当用户按下按钮时,EditText将被清除。当我快速按下按钮时,大量非活动的InputConnection条目会源源不断地流出。

例如,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());
}

如果你想了解更多关于输入连接包装器的信息,请访问下面的链接。

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

票数 -6
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12318521

复制
相关文章

相似问题

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