如何在ViewPager页面切换时隐藏键盘?

4
我有一个ViewPager,其中包含多个片段。其中一个片段中包含EditText。当用户点击EditText并滑动到另一页时,键盘将覆盖屏幕的一半。如何在页面更改时隐藏键盘?我尝试了以下方法,但它并没有起作用:
mFragmentsViewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
        @Override
        public Fragment getItem(int position) {
            InputMethodManager inputManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
            inputManager.hideSoftInputFromWindow(floatingActionButton.getWindowToken(), 0);
            switch (position){
                case 0:
                    return mFragments.get(0);
                case 1:
                    return mFragments.get(1);
                case 2:
                    return mFragments.get(2);
                default:
                    return mFragments.get(0);
            }
        }
        @Override
        public int getCount() {
            return 3;
        }
    });

感谢大家提前回答!
2个回答

3

建议您不要让适配器处理键盘,而是将OnPageChangeListener类型的监听器添加到ViewPager中,并在onPageSelected方法中添加以下代码:

mFragmentsViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {

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

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

希望这能帮到你!

1
创建一个通用函数,您可以在任何需要的地方重复使用它。
public static void hideSoftKeyboard(Activity activity) {
    try {
        InputMethodManager inputMethodManager =
                (InputMethodManager) activity.getSystemService(
                        Activity.INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(
                activity.getCurrentFocus().getWindowToken(), 0);
        //inputMethodManager.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接