0

Если честно, я не знал, что писать как заголовок для этого вопроса, потому что он немного сложный.Как начать фрагмент после ввода SearchView

У меня есть деятельность, фрагмент и адаптер.

Актив имеет ViewPager, который является адаптером FragmentStatePagerAdapter, и в зависимости от выбранного элемента или позиции он создает новый экземпляр фрагмента.

Адаптер фрагментов загружает список элементов в RecyclerView. Каждый новый экземпляр в FragmentStatePagerAdapter представляет собой другой строковый массив для RecyclerView.

Я установил поиск на панели инструментов для активности, и когда в поиске есть вход, он должен запустить функцию во фрагменте.

Эти функции фрагмента, которые слушатели поиска

@Override 
    public boolean onQueryTextSubmit(String s) { 
     return false; 
    } 

    @Override 
    public boolean onQueryTextChange(String s) { 
     performSearch(s); 
     return false; 
    } 

    @Override 
    public boolean onClose() { 
     performSearch(null); 
     return false; 
    } 

    private void performSearch(final String query) { 
     if (mTimer != null) { 
      mTimer.cancel(); 
      mTimer.purge(); 
     } 
     mTimer = new Timer(); 
     mHandler = new Handler(); 
     mTimer.schedule(new TimerTask() { 
      @Override 
      public void run() { 
       mHandler.post(new Runnable() { 
        @Override 
        public void run() { 
         mAdapter.filter(query); 
        } 
       }); 
      } 
     }, 150); 
    } 

Дело в том, что я не знаю, как получить текущий фрагмент, так что я могу установить fragment.onQueryTextChange(searchInput) и предотвратить его создавая новый экземпляр фрагмента.

Что я хочу сделать, короче говоря, возможность получить фрагмент с его уже определенным экземпляром и заставить его фильтровать массив, определенный в экземпляре, с текстом на входе поиска, в том же действии и на странице от ViewPager.

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

ответ

1

Я не уверен, какой фрагмент вы ищите. Вы можете получить фрагмент из активности с помощью getFragmentManager().findFragmentById(R.id.container) или из адаптера с mAdapter.getItem(position). Тогда вы можете проверить класс фрагмента с помощью instanceof, а затем вызвать любой метод, который вы хотите.

+0

У меня есть ViewPager, и его адаптер является FragmentStatePagerAdapter –

+0

и whre является проблемой? вы можете получить фрагмент из адаптера с помощью getItem() – Kikju