【发布时间】:2018-08-08 23:45:46
【问题描述】:
我在 Activity 的工具栏中有一个 SearchView,它承载一个 Fragment,它有一个 ViewPager 的 4 个选项卡,每个选项卡由另一个 Fragment 组成(这种结构是有原因的,所以我不想详述除非有人认为这是我的问题的原因)。当用户最初搜索某些内容时,一切正常。但是,当用户编辑搜索查询并按 Enter 键时,已选择的选项卡不会刷新(当我们从它导航到其他选项卡然后返回时它会刷新)。
以下是我的意思的截图(第一张图片是在原始搜索之后,一切都很好,第二张图片是我正在编辑查询,第三张图片是我点击回车后 - 结果保持不变并且没有任何更新,因为下面代码中的 isVisible() 在片段对我来说似乎清晰可见时返回 false)。
当一个查询被提交时,Activity 会将搜索查询发送到包含 ViewPager 和 TabLayout 的片段,该片段将其传递给当前选项卡。这是提交查询后在包含 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);
}
}
底部的 submitQuery() 行永远不会被调用,因为 isVisible 返回 false。但是,在记录当前选项卡的生命周期方法时,最后一次调用是 onStart(),然后是 onResume()。当我单击工具栏并编辑查询并按回车键时,这不会改变,并且当前选项卡是可见的,所以我不知道为什么返回 false。
我应该在用户提交查询后添加托管活动,我从工具栏和 SearchView 中移除焦点,以便在输入搜索后键盘折叠。
【问题讨论】:
标签: android android-fragments android-viewpager searchview android-tablayout