提问人:Leandros 提问时间:9/7/2012 最后编辑:LaneLeandros 更新时间:11/16/2023 访问量:42106
InputConnectionWrapper 警告
InputConnectionWrapper warning
问:
每当我的应用可见时关闭屏幕时,我都会收到 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
答:
事实证明,上述用法是完全正确的。但是,永远不会被调用(特殊情况除外),因为在键入过程中会使用其他方法。这些主要是和 .InputConnectionWrapper
commitText()
setComposingText()
sendKeyEvent()
但是,覆盖很少使用的方法也很重要,例如或确保捕获每个用户输入,因为我遇到了类似的问题。deleteSurroundingText()
commitText()
我的情况:我有一个用户输入的视图。当用户按下按钮时,该按钮将被清除。当我快速按下按钮时,许多非活动条目流出。EditText
EditText
InputConnection
例如editText.setText(null);
上面我的 logcat 中的最后一行很好地表明了正在发生的事情。果不其然,清除文本的请求不知所措。在尝试清除文本之前,我尝试修改代码以检查文本长度:InputConnection
if (editText.length() > 0) {
editText.setText(null);
}
这有助于缓解问题,因为快速按下按钮不再会导致警告流。但是,当用户在键入内容和按下按钮之间快速切换或在应用程序负载不足时按下按钮等时,这仍然容易出现问题。IInputConnectionWrapper
幸运的是,我找到了另一种清除文本的方法:.有了这个,我根本没有收到警告:Editable.clear()
if (editText.length() > 0) {
editText.getText().clear();
}
请注意,如果您希望清除所有输入状态而不仅仅是文本(自动图文集、自动电容、多重点击、撤消),您可以使用 .TextKeyListener.clear(Editable e)
if (editText.length() > 0) {
TextKeyListener.clear(editText.getText());
}
如果您想了解更多关于输入连接包装器的信息,请访问下面的链接。
http://developer.android.com/reference/android/view/inputmethod/InputConnection.html
评论
猜测已经太晚了,无法提供帮助,但就我而言,问题是我在文本编辑中有一个“setOnEditorActionListener”——如果我删除这个侦听器,警告就会消失。
就我而言,在按钮布局中,我有这个:,只需删除它并解决问题......android:textIsSelectable="true"
TextWatcher textWatcherContent = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
String content = mTxtContent.getText().toString();
String contact = mTxtContact.getText().toString();
if (null != mTxtContent && null != mTxtLength) {
int length = mTxtContent.getText().toString().length();
if (length > 200) {
mTxtContent.removeTextChangedListener(textWatcherContent);
SpannableString spannableString = new SpannableString(content);
spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#FF3838")), 200
, mTxtContent.length() , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTxtContent.getText().clear();
mTxtContent.append(spannableString);
mTxtContent.setSelection(content.length());
mTxtContent.addTextChangedListener(textWatcherContent);
}
}
}
};
评论
我正在使用 webView 浏览一个 URL,我需要注册或登录该 URL。当我将焦点切换到不同的 TextField 时,我的应用程序冻结了,并且上面出现了相同的错误。
我设法解决它的方式是它缺少下面的这段关键代码:
@override
void initState() {
super.initState();
if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
}
此代码应位于扩展主类的实例类的声明之后,在构建 Widget 函数之前。
在错误日志中,您可能仍然会看到相同的警告,但它肯定会解决导致的任何问题,无论是 Swift 键盘还是 TextField 本身。
评论
下一个:如何禁用缩小转化警告?
评论