Попытайтесь использовать пользовательское app
пространство имен для Вашего actionViewClass
также:
app:actionViewClass="android.support.v7.widget.SearchView"/>
Добавьте следующую строку к прозащита-rules.pro файл, расположенный в папка приложения :
- сохраняют андроид support.v7.widget класса. SearchView {*;}
Если Вы используете progurd затем, необходимо добавить следующую строку в прозащита-rules.pro , файл
- сохраняет общедоступный андроид support.v7.widget класса. ** {*;}
или
- сохраняют андроид support.v7.widget класса. SearchView {*;}
Если, если Вы уменьшаете в своих типах сборки как этот затем, необходимо добавить одну строку 'прозащитный-rules.pro' файл.
buildTypes {
release {
debuggable false
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
debuggable true
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Добавляют строку Ваш 'прозащитный-rules.pro' файл.
-keep class android.support.v7.widget.SearchView { *; }
После нажатия на результат приложение ожидает, что операция не завершила и пытается пойти далее в Поглощенный аргумент.
SearchView.OnSuggestionListener
и возврат true
, который уведомляет Ваше приложение, что операция щелчка завершилась.
searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() {
@Override
public boolean onSuggestionClick(int position) {
return true;
}
@Override
public boolean onSuggestionSelect(int position) {
return false;
}
});
ItВґs дополнительная информация к ответу Simas. Я нашел это в другом ответе ( https://stackoverflow.com/a/33400808/4949671), и это было очень важно для решения моего исключения:
Уведомление, что, это,
app:actionViewClass
НЕandroid:actionViewClass
Проблема происходит, если Прозащита включена. может быть зафиксирован путем добавления, что это для проохранения правил
- сохраняет андроид support.v7.widget класса. SearchView {*;}
У меня была довольно подобная проблема с androidx.appcompat.widget.SearchView
, но другая причина. Катастрофический отказ происходит на кнопке действий, нажимают
Process: hotspotshield.android.vpn, PID: 26089
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.drawable.Drawable.getPadding(android.graphics.Rect)' on a null object reference
at androidx.appcompat.widget.SearchView.adjustDropDownSizeAndPosition(SearchView.java:1373)
at androidx.appcompat.widget.SearchView$4.onLayoutChange(SearchView.java:380)
at android.view.View.layout(View.java:20690)
at android.view.ViewGroup.layout(ViewGroup.java:6194)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
The, причина пропускает атрибут android:popupBackground
в теме. На самом деле материальные темы AppCompat имеют необходимый фон, но несмотря на мою тему расширяется от Theme.AppCompat.Light
, это все еще отказывает. Единственное решение, которое я нашел, состоит в том, чтобы переопределить атрибут:
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="android:popupBackground" tools:ignore="PrivateResource">@drawable/abc_popup_background_mtrl_mult</item>
</style>
Это - значение по умолчанию, drawable, который используется в AppCompat. Это отмечено как частное, но можно использовать его все же. Или объявите фон, drawable собой
Это могло также произойти, если у Вас есть включенная прозащита, и она чередует класс aways SearchView
. Необходимо было бы изменить прозащитные настройки для хранения класса.
См. этот вопрос для получения дополнительной информации.
через некоторое время проигрывания "выполненного & ошибка" я нашел решение.. Похож на элемент UI, не причина, что вызывает ошибку. После установки поиска к 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"/>
И "Панель поиска" в [1 113] 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>
[еще 1110] информация-> Документы