Android SearchView未在不同的片段中隐藏工具栏
我在Android SearchView未在不同的片段中隐藏工具栏,android,android-fragments,android-toolbar,android-menu,Android,Android Fragments,Android Toolbar,Android Menu,我在Tablayout的Fragment中的一个内部实现了SearchView。在tablayout片段之间切换时,它工作正常(显示/隐藏) 我的问题是我有一个家庭活动,我在其中一个片段中实现了导航抽屉,我添加了表格布局,在其中一个表格布局片段中添加了搜索视图。当我从具有SearchView的Fragment切换到NavDrawer的Fragment时,会出现问题。 Searchview也保留在其他片段中,当我切换回添加Searchview的片段时,该片段会在工具栏上再添加一个Searchvie
Tablayout
的Fragment
中的一个内部实现了SearchView
。在tablayout片段之间切换时,它工作正常(显示/隐藏)
我的问题是我有一个家庭活动
,我在其中一个片段中实现了导航抽屉
,我添加了表格布局
,在其中一个表格布局片段中添加了搜索视图
。当我从具有SearchView
的Fragment
切换到NavDrawer的Fragment
时,会出现问题。
Searchview也保留在其他片段中,当我切换回添加Searchview的片段时,该片段会在工具栏上再添加一个Searchview
这是我的代码片段,作为SearchView
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
setHasOptionsMenu(true);
....
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_search, menu);
LogUtils.LOGI("menu added", "menu");
// Associate searchable configuration with the SearchView
//SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
//SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
//searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
final MenuItem item = menu.findItem(R.id.search);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String query) {
LogUtils.LOGI("Search filter", query);
final ArrayList<EventModel> filteredModelList = filter(allEventseventsArrayList, query);
allEventsListAdapter.animateTo(filteredModelList);
eventbriteListRecyclerView.scrollToPosition(0);
return true;
}
});
searchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LogUtils.LOGI("Search", "Search Expands");
titleIconImageView.setVisibility(View.GONE);
}
});
searchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
LogUtils.LOGI("Search", "Search Collapse");
titleIconImageView.setVisibility(View.VISIBLE);
return false;
}
});
MenuItemCompat.setOnActionExpandListener(item,
new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem menuItem) {
// Return true to allow the action view to expand
titleIconImageView.setVisibility(View.GONE);
LogUtils.LOGI("Menu", "Menu Expands");
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem menuItem) {
// When the action view is collapsed, reset the query
LogUtils.LOGI("Menu", "Menu Collapse");
titleIconImageView.setVisibility(View.VISIBLE);
// Return true to allow the action view to collapse
return true;
}
});
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
setHasOptionsMenu(false);
....
}
我没有在活动中添加任何与菜单相关的代码
使用searchView首次运行图像
从导航菜单切换到不同片段后的图像
图像再次切换到具有菜单的片段
这有点老套,但我通过将SetHasOptions菜单设置为true并通过清除OnCreateOptions菜单中的菜单,解决了这个问题
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater){
menu.clear()
}