Nano Hash - криптовалюты, майнинг, программирование

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

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

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

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

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


  • /* Чтобы скрыть программную клавиатуру */ В одну строку: ((InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(view.getWindowToken(),0); 27.07.2013

Ответы:


1

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

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) {
    }
});
05.08.2012
  • Спасибо, это сработало. Мне пришлось использовать мой viewPager в качестве представления и выполнить activity.getSystemService, но процесс сработал. 06.08.2012
  • В одну строку: ((InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(view.getWindowToken(),0); 27.07.2013
  • вы можете настроить представление на пейджер представления, чтобы использовать его, не находя представления: imm.hideSoftInputFromWindow(mViewPager.getWindowToken(), 0); 21.01.2015
  • @AndroidGeek сам просмотрщик может быть передан для mView. 03.10.2018

  • 2

    Я не использую 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);
            }
        }
    }
    
    14.09.2012
  • Гораздо лучшее решение, без сбоев анимации. Спасибо! 14.12.2013

  • 3

    Общий способ:

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

    4

    Простой способ :

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

    5

    В моем случае для активности фрагмента следующее работает нормально.

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

    Если клавиатура отображается для 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) {
             }
       });
    }
    
    06.02.2014
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..