Я пытаюсь реализовать панель поиска в основном действии моего приложения. Для этого я использовал документацию из сайт разработчика Android.
Я выполнил инструкции, и у меня есть панель поиска, где я могу ввести запрос. Проблема здесь в том, что впервые, когда я пытаюсь выполнить поиск, мне приходится дважды щелкнуть значок поиска.
Во-первых, моя полоса выглядит как панель по умолчанию: Панель поиска по умолчанию
Я заметил, что значок не совсем белый, вроде бы в нем есть какая-то прозрачность, но я выбрал полностью белый значок.
Затем после щелчка по значку моя полоса выглядит так: Панель поиска нажата один раз
Значок идет влево, и у меня есть кнопка назад, так как я уже был в поле поиска.
Когда я снова нажимаю на значок поиска, я наконец получаю желаемый результат: Панель поиска в режиме редактирования
Когда я выхожу из панели поиска и делаю это снова, это то же самое 1 или 2 раза, а затем у меня нормальное поведение: я перехожу от первого изображения к последнему одним щелчком мыши.
Вот мои файлы:
menu_app.xml
<menu xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:android = "http://schemas.android.com/apk/res/android">
<item android:id = "@+id/search"
android:title = "@string/search"
android:icon = "@drawable/ic_search"
app:showAsAction = "collapseActionView|ifRoom"
app:actionViewClass = "android.widget.SearchView" />
</menu>
AndroidManifest.xml
<activity
android:name = ".activities.MainActivity"
android:label = "@string/app_name"
android:theme = "@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name = "android.intent.action.MAIN" />
<action android:name = "android.intent.action.SEARCH"/>
<category android:name = "android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name = "android.app.searchable"
android:resource = "@xml/searchable"/>
</activity>
searchchable.xml
<searchable xmlns:android = "http://schemas.android.com/apk/res/android"
android:label = "@string/app_name"
android:hint = "@string/search"/>
OnCreateOptionsMenu в MainActivity.java
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
final SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
Log.d(TAG, s);
searchView.clearFocus();
return true;
}
@Override
public boolean onQueryTextChange(String s) {
Log.d(TAG, s);
return false;
}
});
return true;
}
Заранее спасибо за вашу помощь!
Я наконец решил это, пожалуйста, посмотрите мой комментарий о решении.
Наконец нашел решение моей проблемы, я использовал SearchView из класса android.widget.SearchView с панелью инструментов из библиотеки поддержки, поэтому, почему поведение не было хорошим, просто изменил
app:actionViewClass = "android.widget.SearchView"наapp:actionViewClass = "android.support.v7.widget.SearchView", и теперь он работает хорошо!