Intereting Posts
Невозможно установить OnClickListener в диалоговом окне приложения для Android Android – xml – включить один и тот же макет несколько раз не работает Эффект масштабирования для Android SurfaceView Пользовательский вид со списком слоев Layer-List выводит черный экран Как определить максимальную память текстуры на Android OpenGL ES Удаление режима анимации / смены из BottomNavigationView android Vertex Buffer Objects (VBO) не работает на Android 2.3.3, используя GLES20 Когда у вас есть все взгляды в фрагменте? Не удалось разрешить ресурс @ style / Widget.Holo.Light.ActionMode.Inverse EditText потеряет фокус с помощью жесткой клавиатуры, когда TabHost присутствует в действии Получить тип сети Календарь Действие для просмотра недели и дневного просмотра Можно ли протестировать версию релиза вашего приложения с помощью плагина Android Gradle? Преобразование значения шестнадцатеричного цвета (#ffffff) в целочисленное значение Как передать результат asynctask onpostexecute метода в родительскую активность android

Searchview не работает, так как app compat

Поскольку я внедрял приложение, мой поисковый запрос больше не работает:

Process: com.laurenswuyts.witpa, PID: 26666 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.SearchView.setSearchableInfo(android.app.SearchableInfo)' on a null object reference at com.laurenswuyts.witpa.Activities.Events.EventActivity.onCreateOptionsMenu(EventActivity.java:75) at android.app.Activity.onCreatePanelMenu(Activity.java:2820) at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:275) at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:276) at android.support.v7.app.ActionBarActivityDelegate$1.onCreatePanelMenu(ActionBarActivityDelegate.java:79) at android.support.v7.widget.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:49) at android.support.v7.internal.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:459) at android.support.v7.internal.app.ToolbarActionBar$1.run(ToolbarActionBar.java:69) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

Так что nullpointer для searchview, пока у меня есть:

 @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.event_main, menu); // Get the SearchView and set the searchable configuration // Associate searchable configuration with the SearchView SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); searchView.setSearchableInfo( searchManager.getSearchableInfo(getComponentName())); return super.onCreateOptionsMenu(menu); } 

И в моем меню у меня есть следующее:

 <!-- Search Widget --> <item android:id="@+id/action_search" android:title="@string/action_search" android:icon="@drawable/ic_action_search" app:showAsAction="always" android:actionViewClass="android.support.v7.widget.SearchView"/> 

Я понятия не имею, почему он больше не работает, но это произошло с тех пор, как я начал использовать приложение compat 21.

С Уважением,

Попробуйте также использовать пространство имен пользовательского app для вашего actionViewClass :

 app:actionViewClass="android.support.v7.widget.SearchView"/> 

Добавьте следующую строку в файл proguard-rules.pro, находящийся внутри папки приложения :

-keep класс android.support.v7.widget.SearchView {*; }

Это также может произойти, если у вас включен proguard, и он SearchView класс SearchView . Вам нужно будет изменить настройки proguard, чтобы сохранить класс.

См. Этот вопрос для получения более подробной информации.

После некоторого времени игры «run & error» я нашел решение. Похоже, что пользовательский интерфейс не является причиной того, что вызывает ошибку. После установки поиска в QueryListener он работает хорошо. Вот какой код:

Активность, которая содержит SearchBar:

 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String s) { Log.d(TAG, "onQueryTextSubmit "); return false; } @Override public boolean onQueryTextChange(String s) { Log.d(TAG, "onQueryTextChange "); return false; } }); return true; } 

searchable.xml

 <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_name" android:hint="@string/search_hint"/> 

И «SearchBar» в menu.xml

  <item android:id="@+id/search" android:title="@string/search_title" android:icon="@drawable/abc_ic_search_api_mtrl_alpha" app:showAsAction="collapseActionView|ifRoom" app:actionViewClass="android.support.v7.widget.SearchView"/> ... 

И последнее, но не менее важное, манифест (но это должно быть понятно) …

  <activity android:name=".activities.MainActivity" android:label="@string/title_activity_main"> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/> </activity> 

Дополнительная информация -> Документы

Это дополнительная информация для ответа Симаса. Я нашел это в другом ответе ( https://stackoverflow.com/a/33400808/4949671 ), и это было очень важно для решения моего исключения:

Обратите внимание, что это app:actionViewClass NOT android:actionViewClass

После того, как вы нажмете на результат, ваше приложение ожидает, что операция не завершилась и пытается перейти к аргументу Intent.

SearchView.OnSuggestionListener и возвращает true которое уведомляет ваше приложение о завершении операции щелчка.

  searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() { @Override public boolean onSuggestionClick(int position) { return true; } @Override public boolean onSuggestionSelect(int position) { return false; } });