2012-09-07 191 views
8

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

这里是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 
+1

我没有任何广告库,仍然收到此警告! – IronBlossom

+5

您使用的是与Android键盘不同的键盘吗?使用SwiftKey时我看到了相同的情况,使用Androind的时候只有几个警告。 – fr4gus

+0

这里完全一样的问题。 SwiftKey出现更多错误,Swype出现更多错误。你解决了这个问题吗? –

回答

-3

事实证明,InputConnectionWrapper的上述用法是完全正确的。然而,commitText()从来没有被调用(除了特殊情况),因为还有其他方法,在打字过程中使用。这些主要是setComposingText()sendKeyEvent()

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

我的情况:我有一个EditText视图用户键入。当用户按下按钮时,EditText被清除。当我快速按下按钮时,很多不活动的InputConnection条目都会流出来。

E.g. editText.setText(null);

我上面logcat的最后一行提供了一个很好的指示,说明发生了什么。果然,InputConnection被请求清除文本所淹没。我试图修改代码来检查文本长度试图清除之前:

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

这有助于在按下按钮缓解这个问题很快不再引起的IInputConnectionWrapper警告流。但是,当用户在输入内容和按下按钮之间快速切换或在应用程序负载足够时按下按钮等时,这仍然很容易出现问题。

幸运的是,我找到了另一种清除文本的方法:Editable.clear()。有了这个,我不都得到警告:

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

注意,如果要清除所有输入状态,而不仅仅是文本(自动图文集,autocap,多次敲击,撤销),您可以使用TextKeyListener.clear(Editable e)

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

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

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

+10

它看起来像你复制几乎verbatim Johnson Wong的答案在http://stackoverflow.com/questions/8122625/getextractedtext-on-inactive-inputconnection-warning-on-android –

0

猜测已经太晚了帮助,但它是在我的情况,我有一个“setOnEditorActionListener”上的文本编辑问题 - 如果我删除此监听器的警告了。

0

在我在按键布局方面我有这种情况:android:textIsSelectable="true",仅仅取消它,问题就解决了......