我具有以下结构。
最外面的片段的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会覆盖第一个片段。