我有两个选项卡,每个选项卡都有自己的搜索栏。
我在 onCreateOptionsMenu
中绑定了搜索栏。然而,只有当我离开屏幕并返回屏幕时(也就是说,搜索栏需要再次生命周期才能起作用),搜索栏才能正常工作。我确认在 ViewPagerFragment 创建时 onCreateOptionsMenu 确实被调用了两次。
我像这样绑定它们:
MenuItem searchItem = menu.findItem(R.id.search);
searchItem.setVisible(true);
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setImeOptions(EditorInfo.IME_ACTION_DONE);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
...
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
...
return false;
}
});
我猜测这个bug与标签有关。如何使用标签(即viewpager2)实现一个可工作的搜索栏?
我在onCreateOptionsMenu中调用这个函数:
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
// Call the above...
}
承载它们的ViewPager如下所示:
private void init(View view) {
ViewPager2 viewPager2 = view.findViewById(R.id.view_pager_fragment_view_pager);
TabLayout tabLayout = view.findViewById(R.id.tab_layout_fragment_view_pager);
viewPager2.setUserInputEnabled(true);
viewPager2.setAdapter(new ViewPagerFragmentAdapter(ViewPagerFragment.this));
viewPager2.setOffscreenPageLimit(5);
new TabLayoutMediator
(tabLayout, viewPager2,
(tab, position) -> tab.setText(titles[position])).attach();
}
searchView
,你在这方面做过一些研究吗? - Biscuit