Вопрос про SearchView

Интерфейс, диалоги, темы, стили, меню
Ответить
Аватара пользователя
piteriv
Сообщения: 58
Зарегистрирован: 03 янв 2015, 00:16
Откуда: Москва
Контактная информация:

Вопрос про SearchView

Сообщение piteriv » 30 окт 2016, 11:04

Подскажите пожалуйста как сделать виджет SearchView в ActionBar кликабельным и из него считать введённый текст?

Navat
Сообщения: 1
Зарегистрирован: 07 дек 2016, 11:21

Re: Вопрос про SearchView

Сообщение Navat » 07 дек 2016, 11:31

Для начала в layout разметке добавим сам SearchView:

Код: Выделить всё

<android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        android:fitsSystemWindows="true">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" >

            <android.support.v7.widget.SearchView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/search_view"
                android:layout_gravity="right"
                app:theme="@style/Theme.AppCompat.NoActionBar"
                app:searchIcon="@drawable/icon_search_white_android"/>

        </android.support.v7.widget.Toolbar>

        <android.support.design.widget.TabLayout
            android:id="@+id/tabsMain"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            style="@style/AppTabLayout"
            app:tabMode="fixed"
            app:tabGravity="fill"/>
    </android.support.design.widget.AppBarLayout>
Затем в activity находим его:

Код: Выделить всё

searchView = (SearchView) findViewById(R.id.search_view);

// Устанавливаем слушатель при вводе текста
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener()
{
     @Override
     public boolean onQueryTextSubmit(String text)
     {
           return false;
      }

      @Override
      public boolean onQueryTextChange(String text)
      {
            // вот тут отслеживаем ввод текста и применяем необходимые действия
            // в моем случае я произвожу поиск в RecyclerView
            adapter.filter(text);
            return false;
      }
});
Вот код метода filter(String charText) , может пригодится:

Код: Выделить всё

         public void filter(String charText)
        {
            charText = charText.toLowerCase(Locale.getDefault());
            mDataset = new ArrayList<>();
            if (charText.length() == 0)
            {
                // mCleanCopyDataset у нас всегда содержит неизмененную и неотфильтрованную (полную) копию данных списка
                mDataset.addAll(mCleanCopyDataset);
            }
            else
            {
                for (HashMap item : mCleanCopyDataset)
                {
                    // мы перебираем все пункты списка и если какой-то пункт содержит искомый текст, то мы добавляем его в новый список mDataset
                    if (item.get("title").toString().toLowerCase(Locale.getDefault()).contains(charText))
                    {
                        mDataset.add(item);
                    }
                }
            }
            // метод notifyDataSetChanged() позволяет обновить список на экране после фильтрации
            notifyDataSetChanged();
        }

Ответить