Сброс SearchView при изменении фрагмента в ViewPager с вкладками ActionBar
Я реализовал два фрагмента с помощью вкладок ActionBar. Я использую фрагменты Шерлока. Когда я запускаю фрагмент, я создаю вид поиска на панели действий.
Проблема заключается в следующем: когда я что-то ищу в первом фрагменте и, не закрывая вид поиска или не удаляя текст, я перехожу к следующему фрагменту, я получаю свернутый вид поиска, и это нормально. Но когда я снова возвращаюсь к своему первому фрагменту, я вижу список, отсортированный как прежде, но представление поиска свернуто. Единственный способ вернуть исходный список - щелкнуть окно поиска один раз и закрыть его.
Как сбросить поисковое представление по первому фрагменту при переходе ко второму фрагменту или как сохранить открытое поисковое представление при переходе к первому фрагменту?
Любое из решений подойдет.
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
>
<item android:id="@+id/action_search"
android:title="search"
android:icon="@drawable/search"
android:orderInCategory="100"
android:showAsAction="always|collapseActionView"
android:actionViewClass="com.actionbarsherlock.widget.SearchView" />
</menu>
Вот как я надуваюсь во фрагменте
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.main, menu);
SearchView sv = (SearchView)getActivity().findViewById(R.id.action_search);
sv.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
//...
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
bindingData.resetData();
bindingData.getFilter().filter(newText.toString());
return false;
}
});
}
2 ответа
Для тех, кто до сих пор царапает голову и не может найти решение, вот оно, как вы это делаете. Это довольно просто:
Просто назначьте идентификатор для ваших поисковых запросов при его создании (создав ids.xml и зарезервировав там идентификатор и назначив его во время выполнения). Теперь в методе onTabUnselected() основной вкладки определите поисковые запросы и дважды используйте функцию setIconified(true) (одну для удаления текста и одну для свертывания поискового просмотра).
Не забудьте добавить проверку на пустую строку запроса в методе onQueryTextChange вашего поиска, это создало проблему для меня.
Android дает вам такие методы, как onCreate
а также onDestroy
работать с активностью, а также для меню onCreateOptionsMenu
а также onDestoryOptionsMenu
, Ты можешь использовать onDestroyOptionsMenu
метод, чтобы очистить ваш SearchView или реализовать ваши другие идеи.
например:
@Override
public void onDestroyOptionsMenu() {
super.onDestroyOptionsMenu();
if (searchView != null &&
!searchView.getQuery().toString().isEmpty()) {
searchView.setIconified(true);
searchView.setIconified(true);
}
}
Это работает для меня, удачи.