我有一个
Android应用程序,其中包含一个包含2个片段的ViewPager.第一个片段包含EditText字段.当应用程序启动时,该字段立即获得焦点并启动软键盘(我想要发生).第二个片段仅包含一个列表(没有可编辑的文本字段).当我从片段1滑动到片段2时,我希望键盘能够消失.我尝试过的任何东西似乎都没有用.键盘不仅保持在视图中,还继续更新片段1的EditText字段.
我想我要么使用不正确的代码来隐藏键盘或将其放在错误的位置.如果任何人都可以发布正确实现的示例,将不胜感激!
我最近的尝试是放置应该在片段1的onDetach()方法中隐藏键盘的代码:
@Override public void onDetach() { super.onDetach(); InputMethodManager imm = (InputMethodManager) this.context.getSystemService(Context.INPUT_METHOD_SERVICE); // I'VE TRIED ALL THREE BELOW,NONE OF THEM WORK... // imm.hideSoftInputFromWindow(this.messageView.getWindowToken(),0); // imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0); // this.context.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); }
解决方法
请参阅
this answer.基本上,您需要让ViewPager的OnPageChangeListener为您隐藏键盘. (如果希望滑动动画保持平滑,请在onPageScrollStateChanged而不是onPageSelected中执行此操作.)
@Override public void onPageScrollStateChanged(int state) { if (state == ViewPager.SCROLL_STATE_IDLE) { if (mViewPager.getCurrentItem() == 0) { // Hide the keyboard. ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)) .hideSoftInputFromWindow(mViewPager.getWindowToken(),0); } } }