如何在ViewPager页面上隐藏键盘更改?

时间:2018-03-07 15:23:33

标签: android

我有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 个答案:

答案 0 :(得分:2)

我建议您将一个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 :(得分: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();
    }

}