Клавиатура не принимает первый символ при смене ввода - PullRequest
0 голосов
/ 13 сентября 2010

У меня установлен TextWatcher на EditText, который меняет тип ввода после того, как пользователь вводит число, а затем пробел.

Если пользователь вводит два числа, тип ввода переключается и принимает следующий символ, но если пользователь вводит только одно число и нажимает пробел, тип ввода все еще изменяется, но он не будет принимать первый символ, который пытается пользователь

Я проверял это на Froyo и 1.6, это происходит только на Froyo, 1.6 работает так, как должно.

Вот код:

    TextWatcher watcher = new TextWatcher() {
    @Override
    public void afterTextChanged (Editable s) {
    }

    @Override
    public void beforeTextChanged (CharSequence s, int start, int count, int after) {
    }

    @Override
    public void onTextChanged (CharSequence s, int start, int before, int count) {          
        // Parsed text holder is a class that just parses the EditText and pulls out various parts.
        ParsedTextHolder th = parseTextHolder(s);

        String newText = "";
        Boolean setTextKeyListener = false;

        String tGetTextString = mQuery.getText().toString();

        if (!th.pFullMatch.equals("")) {
            if (th.pFullMatch.length() == 2) {
                mQuery.setKeyListener(new
                TextKeyListener(TextKeyListener.Capitalize.SENTENCES, true));
                newText = tGetTextString + " for ";
                setTextKeyListener = true;
            }
        }

        if (setTextKeyListener) {
            Log.i("setTextKeyListener", "true");
            if (mQuery.getKeyListener().getClass() != TextKeyListener.class) {
                    mQuery.setKeyListener(new TextKeyListener(TextKeyListener.Capitalize.SENTENCES, true));
            } else {
                    Log.d("setTextKeyListener", "skipped. already was text.");
            }

            if (!newText.equals("")) {
                    int position = newText.length();
                    String ttext = newText;
                    newText = "";
                    mQuery.setText(ttext, TextView.BufferType.EDITABLE);
                    mQuery.setText(ttext);
                    Editable text = mQuery.getEditableText();
                    Log.w("setting selectiont to text: ", text.toString());
                    Log.w("setting selectiont to position: ", Integer.toString(position));
                    Selection.setSelection(text, position);
                    mQuery.setKeyListener(new TextKeyListener(TextKeyListener.Capitalize.SENTENCES, true));
            }

        }
    }
};

Кроме того, вот APK, если вы хотите увидеть, на что похожа ошибка: http://endlesswhileloop.com/files/KeyboardBug.apk

1 Ответ

0 голосов
/ 13 сентября 2010

Является ли mQuery редактируемым текстом, который просматривается?Согласно javadocs , вам не следует вносить какие-либо изменения в текст вашего EditText в onTextChanged.Все такие изменения должны быть сделаны в afterTextChanged.

Как правило, я изучил изменение в onTextChanged, а затем выполняю работу, которая приводит к изменению в afterTextChanged.Вы можете попробовать это.

...