Intereting Posts
Фрагмент Android исчезает после рендеринга Отправка электронной почты с помощью приложения SENDTO на некоторых устройствах не работает Использует Proguard с Android стоит усилий? Как избежать вызова обоих: onItemClicked и onTextChanged в AutoCompleteTextView Сохранение видеозаписи в режиме реального времени на SD-карте с помощью Local Socket в Android – Видео не воспроизводится Создание приложения для Android, которое нельзя удалить или удалить Эмулятор Android использует 100% -ный процессор, даже если ничего не работает на нем? Как заменить строку для buildvariant с помощью gradle в студии Android? База данных Android SQLite с многопоточным Как программно показать следующий вид в ViewPager? Как отключить кнопку «Домой» без использования TYPE_KEYGUARD? Убедитесь, что волейбол получает результаты из кеша или по сети Примечание: android.support.v4.text.ICUCompatIcs: не удается найти динамически ссылочный класс libcore.icu.ICU Отправить и получить IQ XMPP ASMACK Android Как cenralize последний неровный ряд в GridView в android?

NullPointerException в SearchView с помощью AppCompat в Android 5.0

Я обновляю свое приложение, используя все темы AppCompat. Я получаю nullpointer здесь:

@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); MenuItem searchItem = menu.findItem(R.id.menu_search); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); setupNewSearchView(searchItem, searchManager); return true; } private void setupNewSearchView(final MenuItem searchItem, SearchManager searchManager) { final SearchView searchView = (SearchView) searchItem.getActionView(); // Null at line below searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); // Everything else below edited out } 

Вот мой ключевой импорт:

 import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.SearchView; 

Правильно ли я думаю, что эта строка должна измениться при обновлении до AppCompat ?

 final SearchView searchView = (SearchView) searchItem.getActionView(); 

ОБНОВЛЕНИЕ :

Я изменил это на это

  final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); 

С тем же нулевым результатом …

UPDATE – ADD XML

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/menu_search" app:actionViewClass="android.support.v7.widget.SearchView" android:icon="@android:drawable/ic_menu_search" app:showAsAction="always" android:title="search" /> <item </menu> 

LogCat :

 10-24 11:49:07.040: E/AndroidRuntime(4846): java.lang.NullPointerException 10-24 11:49:07.040: E/AndroidRuntime(4846): at com.---.---.MainFragmentActivity.setupNewSearchView(MainFragmentActivity.java:1300) 10-24 11:49:07.040: E/AndroidRuntime(4846): at com.---.---.MainFragmentActivity.onCreateOptionsMenu(MainFragmentActivity.java:1292) 10-24 11:49:07.040: E/AndroidRuntime(4846): at android.app.Activity.onCreatePanelMenu(Activity.java:2538) 10-24 11:49:07.040: E/AndroidRuntime(4846): at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:275) 10-24 11:49:07.040: E/AndroidRuntime(4846): at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:276) 10-24 11:49:07.040: E/AndroidRuntime(4846): at android.support.v7.app.ActionBarActivityDelegate$1.onCreatePanelMenu(ActionBarActivityDelegate.java:79) 10-24 11:49:07.040: E/AndroidRuntime(4846): at android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(ActionBarActivityDelegateBase.java:1056) 10-24 11:49:07.040: E/AndroidRuntime(4846): at android.support.v7.app.ActionBarActivityDelegateBase.doInvalidatePanelMenu(ActionBarActivityDelegateBase.java:1259) 

В библиотеке поддержки вы должны использовать специальный элемент меню: MenuItemCompat .

 android.support.v4.view.MenuItemCompat 

Имя метода ( getActionView ) остается неизменным.

Ваше меню xml должно выглядеть так:

 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/action_search" android:icon="@android:drawable/ic_menu_search" app:showAsAction="always" app:actionViewClass="android.support.v7.widget.SearchView" android:title="Search"/> </menu>