Вызов invalidateOptionsMenu() приводит к прекращению работы SearchView

Я работаю с DrawerLayout и использую invalidateOptionsMenu() всякий раз, когда он открывается или закрывается. Проблема в том, что после открытия и закрытия DrawerLayout SearchView перестает работать.

Class1:

private DrawerLayout DrawerLayout;
private ListView DrawerList;
private ActionBarDrawerToggle DrawerToggle;
private CharSequence DrawerTitle;
private CharSequence Title;
.....

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
        R.drawable.menu, R.string.app_name, R.string.hello) {
    public void onDrawerClosed(View view) {
        getActionBar().setTitle(Title);
        invalidateOptionsMenu(); 
        // onPrepareOptionsMenu()
    }

    public void onDrawerOpened(View drawerView) {
        getActionBar().setTitle(DrawerTitle);
        invalidateOptionsMenu(); 
        // onPrepareOptionsMenu()
    }
};

mDrawerLayout.setDrawerListener(DrawerToggle);

SearchView определил Class2:

@Override
public void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
    getActivity().invalidateOptionsMenu();
    // onPrepareOptionsMenu()
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.actionbar, menu);
    searchView = (SearchView) menu.findItem(R.id.search).getActionView();
}

Ни один класс не определяет onPrepareOptionsMenu()

Именно это перестает работать:

@Override
public boolean onQueryTextChange(String newText) {
   adapter.getFilter().filter(newText);
    return false;
}

Где адаптер - это адаптер для ListView, а getFilter переходит в класс baseadapter, который реализует фильтруемый.

2 ответа

Хорошо, я исправил это, удалив invalidateOptionsMenu() и добавив вместо него super.onDrawerOpened и super.onDrawerClosed.

Это случилось со мной, решение состояло в том, чтобы инициировать пункт меню поиска после invalidateOptionsMenu(), даже если он уже запущен

    searchMenuItem = menu.findItem(R.id.search);

и тогда:

    searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem);
Другие вопросы по тегам