gpt4 book ai didi

java - Android:标签和搜索栏

转载 作者:行者123 更新时间:2023-12-04 10:06:14 27 4
gpt4 key购买 nike

我有两个标签,每个标签都有自己的搜索栏。

我在 onCreateOptionsMenu 中绑定(bind)了搜索栏.但是,搜索栏仅在我离开屏幕一次并返回屏幕时才起作用(这意味着搜索栏需要一个生命周期才能使用react)。我确认在创建 ViewPagerFragment 时确实调用了两次 onCreateOptionsMenu。

我像这样绑定(bind)它们:

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();
}

最佳答案

当我们找到解决方案时,OP 和我正在沟通。

首先将每个 fragment 更改为

public class MergedItemsFragment extends Fragment implements SearchView.OnQueryTextListener {

/// ------------------------------
/// SearchView.OnQueryTextListener

@Override
public boolean onQueryTextSubmit(String query) {
// ...
return false;

}

@Override
public boolean onQueryTextChange(String newText) {
// ...
return false;

}

/// --------
/// Fragment

@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

return inflater.inflate(R.layout.fragment_merged_items, container, false);

}

@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);

final MenuItem searchItem = menu.findItem(R.id.search);
final SearchView searchView = (SearchView) searchItem.getActionView();

searchView.setImeOptions(EditorInfo.IME_ACTION_DONE);
searchView.setOnQueryTextListener(this);

}

}

  • SearchView通过在应用程序的 Activity 中使用 menu.xml 文件进行了膨胀。
  • SearchView.OnQueryTextListener由每个 Fragment 实现需要访问 SearchView
  • 由于onCreateOptionsMenu()每次调用 Fragment被创建,或随后进入视野(例如滑动); SearchViewOnQueryTextListener更新为对应的Fragment
  • 最后,在 OP 的主要 Fragment 中有一行包含 ViewPager2 ,已删除:viewPager2.setOffscreenPageLimit(5);导致每个 FragmentFragmentStateAdapter 提供实例化和变异 SearchViewOnQueryTextListener每次一个Fragment被创建。
    删除该行确保只有 Fragment可见的绑定(bind)到 ToolbarSearchView .

  • 如果需要更多代码,我很乐意发布我所拥有的,如果我想出一个使用 viewPager2.setOffscreenPageLimit(5); 的解决方案即缓存,我也会发布

    关于java - Android:标签和搜索栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60422862/

    27 4 0