Имеется mainActivity с NavigationDrawer и Toolbar.
Активити переключает разные фрагменты.
Во многих фрагментах должен быть реализован поиск, в некоторых - нет.
SearchView вынесен в тулбар.
Чтобы не прописывать для каждого фрагмента свой поиск я вынес все это в onCreateOptionsMenu mainActivity.
Вопрос: каким образом и где следует скрывать и показывать SearchView при смене фрагментов и как вызвать метод текущего фрагмента при подтверждении поиска?
Чтобы было понятнее выложу немного кода:
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
Log.d(LOG_TAG, "onCreateOptionsMenu");
getMenuInflater().inflate(R.menu.menu_main, menu);
connectionStatus = menu.findItem(R.id.connectionStatus);
searchItem = menu.findItem( R.id.action_search);
final SearchView searchView = (SearchView) searchItem.getActionView();
// make blinking cursor
final EditText searchTextView = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
try {
Field mCursorDrawableRes = TextView.class.getDeclaredField("mCursorDrawableRes");
mCursorDrawableRes.setAccessible(true);
mCursorDrawableRes.set(searchTextView, 0); //This sets the cursor resource ID to 0 or @null which will make it visible on white background
} catch (Exception ignored) {}
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
if( ! searchView.isIconified()) {
//todo call current fragment's method
searchView.setIconified(true);
}
searchItem.collapseActionView();
return false;
}
@Override
public boolean onQueryTextChange(String s) {
return false;
}
});
//hide overflow menu button when expanded
MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
setItemsVisibility(menu, searchItem, true);
return true;
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
setItemsVisibility(menu, searchItem, false);
return true;
}
});
return super.onCreateOptionsMenu(menu);
}
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
if (menuItem.isChecked()) menuItem.setChecked(false);
else menuItem.setChecked(true);
drawerLayout.closeDrawers();
Fragment fragment = null;
switch (menuItem.getItemId()) {
case R.id.map:
fragment = new Fragment_Map();
//show search
break;
case R.id.subscribers:
fragment = new Fragment_Subscribers();
//show disable search
break;
case R.id.customlists:
fragment = new Fragment_AccessUserlists();
break;
case R.id.entities:
break;
case R.id.layers:
fragment = new Fragment_Layers();
break;
case R.id.messages:
break;
case R.id.profile:
break;
case R.id.settings:
break;
case R.id.logout:
App_WeOnMap.getAuthenticator().doLogout();
Intent intent = new Intent(Activity_Main.this, Activity_Login.class);
startActivity(intent);
finish();
break;
case R.id.closeapp:
finish();
break;
default:
break;
}
if (fragment != null) {
fragment.setRetainInstance(true);
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.frame, fragment).commit();
}
return true;
}
});