Android InputConnection.commitCorrection()似乎无法正常工作

Android InputConnection.commitCorrection()似乎无法正常工作,android,android-softkeyboard,ime,android-input-method,Android,Android Softkeyboard,Ime,Android Input Method,我正在为Android开发软键盘。 我想使用InputConnection.CommitCorrection()更正一些文本,前提是按下了与Keyboard.KEYCODE\u DONE对应的键。 但是,文本不会改变,它只会闪烁一次。 我怎样才能解决这个问题 public class SimpleIME extends InputMethodService implements KeyboardView.OnKeyboardActionListener { .... @Override

我正在为Android开发软键盘。 我想使用InputConnection.CommitCorrection()更正一些文本,前提是按下了与Keyboard.KEYCODE\u DONE对应的键。 但是,文本不会改变,它只会闪烁一次。 我怎样才能解决这个问题

public class SimpleIME extends InputMethodService
    implements KeyboardView.OnKeyboardActionListener {
....

@Override
public void onKey(int primaryCode, int[] keyCodes) {
    InputConnection ic = getCurrentInputConnection();
    switch(primaryCode){
    ....

        case Keyboard.KEYCODE_DONE:
            ic.commitCorrection(new CorrectionInfo(oldTextPosition, oldText, newText));
            break;
    ....
    }
}

我有一个类似的问题,但没有闪光,只是没有改变的文字。我决定EditText输入根本不响应此commitCorrection调用,或者出于某种原因不接受它,因此我使用了deleteSurroundingText和commitText(我正在替换光标所在的任何单词,如果有的话):

 // limit=0 allows trailing empty strings to represent end-of-string split
    fun getWordBeforeCursor() : String {
        val arr = wordbreak.split(ic.getTextBeforeCursor(255, 0), 0)
        Log.d(TAG, "words before: " + arr.joinToString(","))
        return if (arr.isEmpty()) "" else arr.last()
    }

    fun getWordAfterCursor() : String {
        val arr = wordbreak.split(ic.getTextAfterCursor(255, 0), 0)
        Log.d(TAG, "words after: " + arr.joinToString(","))
        return if (arr.isEmpty()) "" else arr.first()
    }


    fun getCursorPosition() : Int {
        val extracted: ExtractedText = ic.getExtractedText(ExtractedTextRequest(), 0);
        return extracted.startOffset + extracted.selectionStart;
    }

    try {
         ...

        val backward = getWordBeforeCursor()
        val forward = getWordAfterCursor()

        Log.d(TAG, "cursor position: " + getCursorPosition())
        Log.d(TAG, "found adjacent text: [" + backward + "_" + forward + "]")

        // if in the middle of a word, delete it
        if (forward.isNotEmpty() && backward.isNotEmpty()) {
            //instead of this:
            //ic.commitCorrection(CorrectionInfo(getCursorPosition()-backward.length, backward + forward, icon.text))

            //do this:
            ic.deleteSurroundingText(backward.length, forward.length)
            ic.commitText(newText, 1)
        }
    ...