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