#java #android #android_toolbar #android_menu #android_search_view
Собственно, суть описана в заголовке: если при открытом SearchView в toolbar'е сменить
положение экрана, то приложение крашится с ошибкой:
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'boolean
android.view.MenuItem.collapseActionView()' on a null object reference
Сам метод MenuItemCompat.collapseActionView(searchMenu); написан в
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
MenuItemCompat.collapseActionView(searchMenu);
...
}
});
При этом приложение крашится не всегда, а только если выбрана не дефолтная страница
ViewPager'а. Я так понимаю, что это происходит из-за того, что при перевороте экрана
срабатывает заново метод onCreate, но onCreateOptionsMenu вызывается позже. Если способы
решения проблемы?
Ответы
Ответ 1
Да, это происходит из-за того, что вы пытаетесь манипулировать меню до его создания. Вот вам вариант обхода. В onPrepareOptionsMenu проверяйте флаг (boolean переменную shouldCollapseActionView класса активити, коей назначайте нужное значение в нужных местах. В вашем случае - вместо MenuItemCompat.collapseActionView(searchMenu); в слушателе смены страницы ViewPager.) В зависимости от значения флага в onPrepareOptionsMenu раскрывайте/закрывайте searchView Сразу после изменения значения этой переменной вызовите supportInvalidateOptionsMenu() - это заставит перерисоваться меню, вызвав метод onPrepareOptionsMenu. Так у вас всегда в нужном состоянии будет меню и вы сможете его безопасно менять
Комментариев нет:
Отправить комментарий