以编程方式隐藏ViewPager.OnPageChangeListener onPageSelected()中的软键盘?

我有一个带有标签的ViewPager + ActionBar。 我想让软键盘隐藏,当我“滑动”到另一个选项卡,但我不知道如何。

我已经将我的Activity传递给了FragmentPageAdapter的构造函数,所以我可以调用它

activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

但它没有做任何事情(它是在代码可到达的地方)…帮助?

在您的活动中,您可以执行以下操作:

 mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { final InputMethodManager imm = (InputMethodManager)getSystemService( Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mView.getWindowToken(), 0); } @Override public void onPageScrolled(int position, float offset, int offsetPixels) { } @Override public void onPageScrollStateChanged(int state) { } }); 

我不使用onPageSelected()因为隐藏键盘animation与滑动animation一起使用。 而是使用onPageScrollStateChanged()

 @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); } } } 

一般的方法:

 private void hideVirturalKeyboard(){ View v = getCurrentFocus(); if (v != null && v instanceof EditText) { InputMethodManager mgr = (InputMethodManager)(v.getContext().getSystemService(Context.INPUT_METHOD_SERVIC E)); mgr.hideSoftInputFromWindow(v.getWindowToken(), 0); } } 

简单的方法:

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

在我的情况下,以下片段活动工作正常。

 ((CommentActivity)getActivity()).pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { final InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(txtComment.getWindowToken(), 0); } @Override public void onPageScrolled(int position, float offset, int offsetPixels) { } @Override public void onPageScrollStateChanged(int state) { } }); 

更新:这是我的片段活动从两个片段(CommentFragment,AnotherFragment)在ViewPager中打开

 public class CommentActivity extends FragmentActivity { ViewPager pager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); pager = (ViewPager) findViewById(R.id.viewPager); ....... ....... } private class MyPagerAdapter extends FragmentPagerAdapter { public MyPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int pos) { switch(pos) { case 0: return CommentFragment.newInstance(); default: return AnotherFragment.newInstance(); } } @Override public int getCount() { return 2; } } } 

如果键盘出现在CommentFragment中的EditText中,并且想要切换到AnotherFragment并且想要在切换时隐藏键盘

 public class CommentFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ......... ......... ......... ((CommentActivity)getActivity()).pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { final InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(txtComment.getWindowToken(), 0); } @Override public void onPageScrolled(int position, float offset, int offsetPixels) { } @Override public void onPageScrollStateChanged(int state) { } }); }