Android - Реализуйте панель поиска одним щелчком мыши

Я пытаюсь реализовать панель поиска в основном действии моего приложения. Для этого я использовал документацию из сайт разработчика 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", и теперь он работает хорошо!

Borombo 27.03.2018 23:39
0
1
2 570
1

Ответы 1

Я наконец решил это, пожалуйста, посмотрите мой комментарий о решении.

Другие вопросы по теме