我在一个活动的工具栏中有一个SearchView,其中包含一个Fragment,该Fragment的ViewPager包含4个选项卡,每个选项卡都由另一个Fragment组成(这种结构是有原因的,所以我不想在此进行详细介绍除非有人认为这是我出现问题的原因)。当用户最初搜索某些内容时,一切正常。但是,当用户去编辑搜索查询并按回车时,已经选择的选项卡不会刷新(当我们离开它导航到其他选项卡然后返回时,它将刷新)。
以下是我的意思的屏幕截图(第一张图片在原始搜索之后,一切都很好,第二张图片是我在编辑查询,第三张图片是在我按下Enter键之后-结果保持不变并且没有任何更新,因为当我看到的片段清晰可见时,下面代码中的isVisible()返回false。
本质上,当提交查询时,活动将搜索查询发送到包含ViewPager和TabLayout的片段,然后将其传递给当前的Tab。提交查询后,这是包含ViewPager的Fragment中调用的代码:
public void setSearchQuery (String query) {
//mTabLayout.requestFocus();
mSearchQuery = query;
Fragment fragment = mPagerAdapter.getItem(mViewPager.getCurrentItem()); // should theoretically get the current fragment
mTabLayout.getTabAt(mViewPager.getCurrentItem()).select();
if (fragment != null && fragment.isVisible()) {
((ResultsPagerAdapter.QuerySubmitCallback) fragment).submitQuery(query);
}
}
由于isVisible返回false,所以永远不会调用底部的SubmitQuery()行。但是,在记录当前选项卡的生命周期方法时,最后一次调用是onStart(),然后是onResume()。当我单击工具栏上的并编辑查询并按Enter时,它没有改变,并且当前选项卡可见,所以我不知道为什么它返回false。
在用户提交查询后,我应该添加托管活动,从工具栏和SearchView中移出焦点,以便在输入搜索后键盘折叠起来。
答案 0 :(得分:0)
切换选项卡时,fragment
将调用setUserVisibleHint(boolean isVisibleToUser)
。然后,您可以通过isVisibleToUser
来获得getUserVisibleHint()
的值。
如果要获取各种isVisible
中的fragment
,则应使用以下方法更新isVisible
的值:
onAttach
和onDetach()
onStart()
和onStop()
onHiddenChanged
setUserVisibleHint
onViewAttachedToWindow
和onViewDetachedFromWindow