Intereting Posts
Как финансировать проект с открытым исходным кодом? IndexOutOfBoundsException после повторного заполнения массива ArrayList (только для Marshmallow) Vertex Buffer Objects (VBO) не работает на Android 2.3.3, используя GLES20 Как скрыть / показать большой палец в SeekBar Не удалось обнаружить Bluetooth -> Снимите флажок переключателя по умолчанию при использовании настраиваемого селектора Как добиться перекрытия / отрицательной границы в макете ограничений? Фрагмент не разрушен при вращении Приложение Android потеряет данные во время изменения ориентации Android: Appcompat 21 как добавить тень на панель действий Невозможно исправить исключение MediaController.show () Программно добавленные RadioButtons отказываются подчиняться LayoutParams weighting Как анализировать отправку push без регистрации gcm? Могу ли я обнаружить, что конкретное разрешение было удалено для моего приложения для Android? ListView не расширяется внутри NestedScrollView

Программно скрывать мягкую клавиатуру в ViewPager.OnPageChangeListener onPageSelected ()?

У меня есть ViewPager + ActionBar с вкладками. Я хочу, чтобы скрыть мягкую клавиатуру, когда я «провёл» другую вкладку, но я не могу понять, как это сделать.

Я передал в свою деятельность конструктору для FragmentPageAdapter, чтобы я мог позвонить

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

Но он ничего не делает (и это находится в доступной области кода) … помочь?

Solutions Collecting From Web of "Программно скрывать мягкую клавиатуру в ViewPager.OnPageChangeListener onPageSelected ()?"

В своей деятельности вы можете сделать следующее:

 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() потому что анимация с onPageSelected() в себя анимацию прокрутки. Вместо этого используйте 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) { } }); 

UPDATE: Это была активность моего фрагмента, из которой два фрагмента (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; } } } 

Если клавиатура отображается в EditText в CommentFragment и вы хотите переключиться на 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) { } }); }