我在 Tablayout
的一个 Fragment
中实现了 SearchView
。在 tablayout fragment 之间切换时,它工作正常(显示/隐藏)。
我的问题是我有一个 HomeActivity
,我在其中一个 Fragment
中实现了 NavigationDrawer
我添加了 TabLayout
并在其中一个 TabLayout Fragment
中添加了 SearchView
。当我从具有 SearchView
的 Fragment
切换到来自 NavDrawer 的 Fragment
时,会出现问题。
Searchview 也保留在其他 fragment 中,当我切换回我添加了 searchView 的 fragment 时,该 fragment 会在 Toolbar
上再添加一个 searchview。
这是我的 Fragment 代码,作为 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);
}
Fragment
代码,我不想要 SearchView
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
setHasOptionsMenu(false);
....
}
我没有在 Activity 中添加任何与菜单相关的代码。
最佳答案
这有点老套,但我通过将 setHasOptionsMenu 设置为 true 并通过
清除 onCreateOptionsMenu 中的菜单来解决它public void onCreateOptionsMenu (Menu menu, MenuInflater inflater){
menu.clear()
}
关于android - SearchView 没有隐藏在不同 fragment 中的工具栏中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34151212/