AnySoftKeyboad остается с данными мусора после того, как я скрываю это - PullRequest
2 голосов
/ 10 октября 2011

У меня проблема, которая возникает только при использовании AnySoftKeyboard.Я пытаюсь показать / скрыть клавиатуру в соответствии с фокусом EditText.Я использовал методы, которые нашел в этом посте

Когда я прячу клавиатуру, происходит странное поведение -

  • Когда я поворачиваю экран,текст, который был в EditText, удваивается.
  • Я думал, что это связано с методом onCreate, но я вижу, что это происходит также, когда я нажимаю «назад» (Finish ()).Я вижу это за долю секунды до закрытия действия.
  • Когда я начинаю новое действие, (ActivityB из ActivityA), а затем один раз нажав «Назад», ничего не происходит (возможно, «закрытие» невидимой клавиатуры).).
  • Когда я снова нажимаю «назад», ActivityB закрывается, но на долю секунды я вижу текст с клавиатуры ActivityA крупным шрифтом по экрану (например, всплывающее окно на 100 миллисекунд)

У кого-нибудь есть идеи, как с этим бороться?

Ответы [ 2 ]

1 голос
/ 13 октября 2011

Видимо, это ошибка в AnySoftKeyboard.При использовании других клавиатур этого не происходило.

Я решил это, установив setText для представления EditText, прежде чем скрыть его - возможно, он сбрасывает некоторые данные на объекте клавиатуры.

Вот мой код:

        View view = getWindow().getCurrentFocus();
        if (view==null)
            return;

        IBinder binder = view.getWindowToken();
        if (binder == null)
            return;

         // I used this to fix the strange behaviour
        if (view instanceof EditText)
            ((EditText)view).setText(((EditText)view).getText().toString());


        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(binder, InputMethodManager.HIDE_NOT_ALWAYS);

Удивительно, но работает!

0 голосов
/ 10 октября 2011

Попробуйте это:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
...