第二次使用searchview后未调用setUserVisibleHint

时间:2018-11-30 13:07:03

标签: android android-fragments search android-viewpager

我具有以下结构。

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;

通过这些代码,我正在处理像instragram的搜索页面中这样的片段结构。如果未单击搜索视图,则图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方法,则viewpager中第二个片段的textChangedListener会覆盖第一个片段。

0 个答案:

没有答案