Страницы

Поиск по вопросам

четверг, 15 ноября 2018 г.

Null object reference при перевороте экрана с открытым SearchView

Собственно, суть описана в заголовке: если при открытом 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 вызывается позже. Если способы решения проблемы?


Ответ

Да, это происходит из-за того, что вы пытаетесь манипулировать меню до его создания.
Вот вам вариант обхода.
В onPrepareOptionsMenu проверяйте флаг (boolean переменную shouldCollapseActionView класса активити, коей назначайте нужное значение в нужных местах. В вашем случае - вместо MenuItemCompat.collapseActionView(searchMenu); в слушателе смены страницы ViewPager.)
В зависимости от значения флага в onPrepareOptionsMenu раскрывайте/закрывайте searchView
Сразу после изменения значения этой переменной вызовите supportInvalidateOptionsMenu() - это заставит перерисоваться меню, вызвав метод onPrepareOptionsMenu
Так у вас всегда в нужном состоянии будет меню и вы сможете его безопасно менять

Комментариев нет:

Отправить комментарий