Страницы

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

воскресенье, 22 декабря 2019 г.

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

#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. Так у вас всегда в нужном состоянии будет меню и вы сможете его безопасно менять

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

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