在Android App中隐藏软键盘从ViewPager片段

我有一个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); } 

看到这个答案。 基本上,你需要让你的ViewPager的OnPageChangeListener为你隐藏键盘。 (如果您希望滑动animation保持平滑,请在onPageScrollStateChanged而不是onPageSelected执行此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); } } } 

在您的AndroidManifest中,您应该添加到Activity声明android:windowSoftInputMode =“stateHidden”:

 <activity android:name="YourActivity" android:windowSoftInputMode="stateHidden"> </activity> 

并在您的布局从EditText的子项requestFocus中删除:

 <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="15dp" android:ems="10" > <requestFocus /> </EditText> 
  getActivity().getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);