简体   繁体   English

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

[英]Programmatically Hide Soft Keyboard in ViewPager.OnPageChangeListener onPageSelected()?

I have a ViewPager + ActionBar with tabs. 我有一个带标签的ViewPager + ActionBar。 I want to make the soft keyboard hide when I "swipe" to another tab but I can't figure out how. 当我“滑动”到另一个标签时,我想隐藏软键盘,但我无法弄清楚如何。

I've passed in my Activity to the constructor for the FragmentPageAdapter so I can call 我已经将我的Activity传递给FragmentPageAdapter的构造函数,所以我可以调用

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

But it doesn't do anything (and it is in a reachable area of the code)...help? 但它没有做任何事情(并且它位于代码的可到达区域)...帮助?

In your activity, you can do the following: 在您的活动中,您可以执行以下操作:

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

I don't use onPageSelected() because the hide-keyboard animation screws with the swiping animation. 我没有使用onPageSelected()因为隐藏键盘动画与滑动动画一起使用。 Instead use onPageScrollStateChanged() : 而是使用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);
        }
    }
}

Common way: 一般的方法:

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

Simple way : 简单方法:

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

In my case for fragment activity following is working fine. 在我的情况下片段活动以下工作正常。

((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) {
     }
});

UPDATE: This was my fragment activity from which two fragments(CommentFragment,AnotherFragment) are opening in a ViewPager 更新:这是我的片段活动,其中两个片段(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;
        }       
    }

}

If keypad is appear for an EditText in CommentFragment and want to switch to AnotherFragment and want to hide keypad at the time of switch 如果在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) {
         }
   });
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 ViewPager.OnPageChangeListener中的片段接口 - Interface in fragment in ViewPager.OnPageChangeListener 如何使用ViewPager.OnPageChangeListener - How to work with ViewPager.OnPageChangeListener 带有ViewPager.OnPageChangeListener的ActionBarSherlock TabPageIndicator-标签卡住了 - ActionBarSherlock TabPageIndicator with ViewPager.OnPageChangeListener - tab is stuck Android ViewPager.OnPageChangeListener生命周期轮换问题 - Android ViewPager.OnPageChangeListener lifecycle rotation issue ViewPager.OnPageChangeListener给出错误的位置 - ViewPager.OnPageChangeListener giving wrong position Android:Viewpager OnPageChangeListener onpageselected扰乱了幻灯片动画 - Android: Viewpager OnPageChangeListener onpageselected disturbs slide animation ViewPager.OnPageChangeListener在ViewPager完成初始化之前运行 - ViewPager.OnPageChangeListener runs before ViewPager finish init 构造函数Intent(new ViewPager.OnPageChangeListener(){},类 <Player> )未定义 - The constructor Intent(new ViewPager.OnPageChangeListener(){}, Class<Player>) is undefined 如何拦截ViewPager.OnPageChangeListener中的触摸事件 - How to intercept touch events from ViewPager.OnPageChangeListener ViewPager的OnPageChangeListener的onPageSelected方法上的片段崩溃 - Fragment Crashes on ViewPager's OnPageChangeListener's onPageSelected method
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM