InputConnectionWrapper 警告

InputConnectionWrapper warning

提问人:Leandros 提问时间:9/7/2012 最后编辑:LaneLeandros 更新时间:11/16/2023 访问量:42106

问:

每当我的应用可见时关闭屏幕时,我都会收到 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
Android 警告

评论

1赞 IronBlossom 12/31/2012
我没有任何广告资源库,仍然收到此警告!!
5赞 fr4gus 5/8/2013
您使用的键盘是否与 Android 键盘不同?我在使用 SwiftKey 时看到同样的情况,使用 Androind 的时只有很少的警告。
0赞 Luis A. Florit 10/17/2013
这里完全一样的问题。SwiftKey 的错误更多,Swype 的一些错误。你解决了问题吗?
0赞 Bob 10/13/2015
请看这个答案:stackoverflow.com/a/33101522/779408

答:

-7赞 Sethu 3/27/2014 #1

事实证明,上述用法是完全正确的。但是,永远不会被调用(特殊情况除外),因为在键入过程中会使用其他方法。这些主要是和 .InputConnectionWrappercommitText()setComposingText()sendKeyEvent()

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

我的情况:我有一个用户输入的视图。当用户按下按钮时,该按钮将被清除。当我快速按下按钮时,许多非活动条目流出。EditTextEditTextInputConnection

例如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

评论

16赞 Michael Chinen 10/21/2014
看来你几乎一字不差地抄袭了 Johnson Wong 在 stackoverflow.com/questions/8122625/ 的回答......
0赞 Paul 2/29/2016 #2

猜测已经太晚了,无法提供帮助,但就我而言,问题是我在文本编辑中有一个“setOnEditorActionListener”——如果我删除这个侦听器,警告就会消失。

0赞 KronuZ 11/9/2016 #3

就我而言,在按钮布局中,我有这个:,只需删除它并解决问题......android:textIsSelectable="true"

0赞 lang chen 7/11/2019 #4
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);
            }          
        }
    }
};

评论

0赞 lang chen 7/11/2019
用户代码 : mTxtContent.removeTextChangedListener(textWatcherContent);和 mTxtContent.addTextChangedListener(textWatcherContent);
2赞 Theo 7/11/2019
欢迎使用 Stack Overflow。虽然您的代码可能会提供问题的答案,但请在它周围添加上下文,以便其他人知道它的作用以及它为什么在那里。
0赞 Pete Alvin 2/23/2020
我完全不知道这到底是怎么回答OP的问题的。
0赞 Themba Khumalo 10/19/2020 #5

我正在使用 webView 浏览一个 URL,我需要注册或登录该 URL。当我将焦点切换到不同的 TextField 时,我的应用程序冻结了,并且上面出现了相同的错误。

我设法解决它的方式是它缺少下面的这段关键代码:

@override
void initState() {
  super.initState();
  if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
}

此代码应位于扩展主类的实例类的声明之后,在构建 Widget 函数之前。

在错误日志中,您可能仍然会看到相同的警告,但它肯定会解决导致的任何问题,无论是 Swift 键盘还是 TextField 本身。

评论

0赞 Themba Khumalo 10/19/2020
不要忘记导入包 import 'dart:io';放入包含上述代码的类中
0赞 David Buck 10/19/2020
请使用答案下方的编辑按钮添加其他信息。