Сброс 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);
       }
    }

Это работает для меня, удачи.

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