Вопрос про SearchView
Вопрос про SearchView
Подскажите пожалуйста как сделать виджет SearchView в ActionBar кликабельным и из него считать введённый текст?
Re: Вопрос про SearchView
Для начала в layout разметке добавим сам SearchView:
Затем в activity находим его:
Вот код метода filter(String charText) , может пригодится:
Код: Выделить всё
<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>
Код: Выделить всё
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;
}
});
Код: Выделить всё
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();
}