У меня есть две вкладки, и каждая вкладка имеет свою собственную панель поиска.
Я связываю панель поиска в onCreateOptionsMenu
. Однако поисковые панели работают только в том случае, если я покидаю экран один раз и возвращаюсь к экрану (то есть для реагирования поисковых панелей требуется еще один жизненный цикл). Я подтвердил, что onCreateOptionsMenu действительно вызывается два раза во время создания ViewPagerFragment.
Я связываю их так:
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;
}
});
Я предполагаю, что эта ошибка связана с вкладками. Как реализовать работающую панель поиска с вкладками (то есть 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();
}