Поиск в приложении: Searchable Activity, Searchable Dialog

270
26 ноября 2016, 19:19

Хочу сделать поиск в определенной активити в приложении, немного запуталась в тьюториалах. Хочу добавить в MainActivity, стандартный поиск при нажатии на клавишу. Не могу понять, почему поиск не работает.

Добавила searchable.xml:

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

Добавила в Manifest meta-data:

<activity android:name=".views.MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                   <action android:name="android.intent.action.SEARCH" />
                </intent-filter>
            <meta-data android:name="android.app.searchable"
                android:resource="@xml/searchable"/>
            </activity>

Добавила функционал поиска при нажатии на кнопку:

   @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.search:
                Intent intent = getIntent();
                if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
                    String query = intent.getStringExtra(SearchManager.QUERY);
                    onSearchRequested();
                    return true;
                }
                default:
                return super.onOptionsItemSelected(item);
        }
    }
Код menu items 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/search"
        android:icon="@drawable/ic_searched_24dp"
        android:title="search"
        android:actionViewClass="android.widget.SearchView"
        app:showAsAction="collapseActionView|ifRoom" />

При нажатии на кнопку ничего не происходит. Что не так?

Answer 1

Вот посмотрите этоCreating a Search Field in Your Android app. Можно реализовать первый самый простой вариант через интерфейс SearchView.OnQueryTextListener. В методе onCreateOptionsMenu(Menu menu) добавьте:

MenuItem searchItem = menu.findItem(R.id.search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setOnQueryTextListener(this);

Когда нажмете кнопку поиска сработает метод onQueryTextSubmit, там и пропишите свою логику. Если хотите через ContentProvider писать поиск, то посмотрите в статью. У вас многого не хватает

READ ALSO
Расположить кнопку, что бы она была между двумя RelativeLayoout

Расположить кнопку, что бы она была между двумя RelativeLayoout

Нужно расположить кнопку, что бы она была, как на рисунке:

271
Разные адаптеры listview

Разные адаптеры listview

Имеется listview с группами каналовПо нажатию на которую в этом же listview выводится список каналов

238
Передача массива на rest и его сохранение в БД

Передача массива на rest и его сохранение в БД

Делаю rest сервисЗадача передать Json массив и сохранить его в базе

317