尝试在操作栏中包含搜索查看.为此,我做了以下事情:
在菜单文件夹中创建了MenuSearch.xml,如下所示:
包含片段中的OnCreateOptionsMenu方法:
public override void OnCreateOptionsMenu(IMenu menu, MenuInflater inflater) { inflater.Inflate(Resource.Menu.MenuSearch, menu); base.OnCreateOptionsMenu(menu, inflater); var searchManager = (SearchManager) this.Activity.GetSystemService(Context.SearchService); searchView = (SearchView) (menu.FindItem(Resource.Id.action_search).ActionView); searchView.SetSearchableInfo(searchManager.GetSearchableInfo(Activity.ComponentName)); }
我已经设置HasOptionsMenu = true;
了片段的创建.
使用上面的代码,我在行中得到空指针searchView.SetSearchableInfo...
.不知道为什么会发生这种情况,尽管一切似乎都是正确的.
基于解决类似问题的一些建议,我还尝试了searchview的以下选项.
var item = menu.FindItem (Resource.Id.action_search); var searchItem = MenuItemCompat.GetActionView(item); searchView = searchItem.JavaCast(); searchView.SetSearchableInfo(searchManager.GetSearchableInfo(Activity.ComponentName));
但同样,我将searchView视为null.
现在我已经尝试了可能的选项,我对于为什么searchview变为null无能为力.
任何帮助深表感谢.
将MenuSearch.xml更改为
并在你的片段中添加 searchView.setOnQueryTextListener
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); menu.clear(); inflater.inflate(R.menu.search_option_menu, menu); MenuItem item = menu.findItem(R.id.action_search); SearchView searchView = new SearchView(((MainActivity) mContext).getSupportActionBar().getThemedContext()); MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItemCompat.SHOW_AS_ACTION_IF_ROOM); MenuItemCompat.setActionView(item, searchView); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String newText) { return false; } }); searchView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } } ); }
答案已于2018年更新。如果您使用Java,对Kotlin表示抱歉。
您的xml菜单资源(例如search_menu.xml):
构建代码:
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater?) { super.onCreateOptionsMenu(menu, inflater) menu.clear() inflater?.inflate(R.menu.search_menu, menu) val searchView = SearchView((context as MainActivity).supportActionBar?.themedContext ?: context) menu.findItem(R.id.action_search).apply { setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW or MenuItem.SHOW_AS_ACTION_IF_ROOM) actionView = searchView } searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String): Boolean { return false } override fun onQueryTextChange(newText: String): Boolean { return false } }) searchView.setOnClickListener {view -> } }
您可能还需要将这一行放进去onCreate()
(为我的片段工作),以使所有内容都显示出来:
setHasOptionsMenu(true)