setUserVisibleHint не вызывается после второго использования searchview - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть следующая структура.

Structure

OnCreateView самого внешнего фрагмента;

 changeFragment(new SearchDiscoverFragment(), id);

    search_box.setOnSearchClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
             changeFragment(new AFragment(), id);

        }
    });

    search_box.setOnCloseListener(new SearchView.OnCloseListener() {
        @Override
        public boolean onClose() {
            changeFragment(new BFragment(), id);
            search_box.onActionViewCollapsed();
            search_box.clearFocus();
            return true;
        }
    });

    return view;

По этим кодам яЯ работаю со структурой фрагмента, подобной той, которая должна появиться, как на странице поиска ИнстраграмаКогда вид поиска не щелкается, ничья 1 находится впереди, а при щелчке ничья 2 впереди.Также в viewpager есть 2 фрагмента.

Это onCreateView фрагмента, который содержит viewpager во втором рисунке.

    List<Fragment> fragments = new ArrayList<>();
    fragments.add(new A1Fragment());
    fragments.add(new A2Fragment());
    PagerAdapter pagerAdapter = new PagerAdapter (getFragmentManager(), fragments, getContext());
    search_pager.setAdapter(pagerAdapter );
    search_tab.setupWithViewPager(search_pager);

В фрагментах, которые находятся в viewpager, есть это;

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser && isResumed())
        onResume();
}

@Override
public void onResume() {
    super.onResume();
    if (!getUserVisibleHint()) {
        return;
    }
    setSearch();
}

Метод setSearch () просто заполняет представление рециркулятора во фрагментах, которые находятся в Viewpager.

Чтомоя проблема?

Когда я открываю приложение и попадаю в эту часть приложения (часть поиска), первоначально draw2 приветствует меня.Затем я нажимаю на вид поиска и открывается второй розыгрыш.Я поместил некоторый текст в представление поиска, и это точно ищет и не проблема.После того, как я нажимаю кнопку закрытия в ViewPager, приложение выглядит как первое рисование, и снова я нажимаю на представление поиска и помещаю некоторый текст, но оно больше не вызывает метод setSearch ().Так что экран просто остался пустым.

setSearch () метод;

public void setSearch() {
    ((android.support.v7.widget.SearchView) getParentFragment()
            .getView()
            .findViewById(R.id.search_box))
            .setOnQueryTextListener(new android.support.v7.widget.SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(final String newText) {
            // fetch data from server and put in recycler view.
            return false;
        }
    });
}

Я думаю, что проблема в методе setUserVisibleHint.После второго поиска он не звонит, кажется.Что я могу с этим поделать?Если я не поставлю setUserVisibleHint и метод onResume, textChangedListener второго фрагмента в окне просмотра переопределяет первый.

...