2014-09-24 3 views
1

Скажите, что у меня есть активность, которая показывает фрагмент A. От фрагмента A я нажимаю кнопку, чтобы переключиться на фрагмент B. На фрагменте A я скрываю мягкую клавиатуру в методе onPause(). На фрагменте B я показываю мягкую клавиатуру в методе onResume().Android-клавиатура: скрыть и сразу показать

Теперь, когда я нажимаю кнопку, отображается фрагмент B, но клавиатура не отображается, что не очень хорошо. Если фрагмент A не использует клавиатуру (удалите код скрытой клавиатуры в onPause()), тогда он отлично работает.

Я установил точку останова, и определенно фрагмент A onPause вызывается перед onResume() фрагмента B. Так что в теории я думаю, что клавиатура все равно должна быть показана, несмотря ни на что.

Любая идея?

+0

То, что я подозреваю, заключается в том, что вызовы скрыть и показать клавиатуру планируют запустить в потоке пользовательского интерфейса, после чего шоу происходит почти сразу после скрыть. Поскольку клавиатура занимает некоторое время для анимации с экрана, я подозреваю, что команда show вычеркнута из обработчика пользовательского интерфейса и пытается выполнить, но обнаруживает, что клавиатура все еще там, так что ничего не делает. – Karakuri

+0

Вот что я подозреваю. Но сделать задержку - это не чистый путь. Интересно, есть ли лучший способ. – namanhams

+0

Лично я бы не манипулировал клавиатурой в onPause()/onResume(). – Karakuri

ответ

0

Вы можете немного задержать показанное на клавиатуре. что-то вроде:

Handler handler = new Handler(); 
handler.postDelayed(new Runnable(){ 
    @Override 
    public void run(){ 
     //show the keybpoard 
    } 

}, 500); 
Смежные вопросы