我在 fragment 内使用SearchView
和Toolbar
,我想注册SearchView.OnQueryTextListener
接口(interface),以便我可以在用户时得到回调执行搜索。
我使用 Toolbar
来扩展菜单(在 onCreateView
内):
mToolbar = (Toolbar) v.findViewById(R.id.toolbar);
mToolbar.inflateMenu(R.menu.menu_main);
mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
onOptionsItemSelected(item);
return false;
}
});
以这种方式展开菜单不会调用 onCreateOptionMenu
方法,通常我们在该方法中注册回调:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_main, menu);
mGoTodayMenuItem = menu.findItem(R.id.action_go_to_today);
mSearchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
mSearchView.setQueryHint("Search");
mSearchView.setSearchableInfo(searchManager
.getSearchableInfo(getActivity().getComponentName()));
mSearchView.setOnQueryTextListener(this);
}
最佳答案
之所以没有调用onCreateOptionsMenu()
,是因为您需要在 fragment 的onCreateView()
中调用setHasOptionsMenu(true)
。
您可以从onCreateView()
中删除此代码
mToolbar = (Toolbar) v.findViewById(R.id.toolbar);
mToolbar.inflateMenu(R.menu.menu_main);
mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
onOptionsItemSelected(item);
return false;
}
});
做完这一切之后。您可以轻松地使用搜索 View 的 onCreateOptionMenu()
实现。
希望有帮助。 干杯!
关于android - Fragment 内带有工具栏的 SearchView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31851982/