2015-03-19 2 views
4

Я реализовал два фрагмента с вкладками ActionBar. Я использую фрагменты Шерлока. Когда я начинаю фрагмент, я создаю searchview на панели действий.Сброс SearchView при изменении фрагмента в ViewPager с вкладками ActionBar

Проблема: когда я что-то искал на первом фрагменте и не закрывал поиск или удалял текст, я перехожу к следующему фрагменту, я получаю свернутое searchview, и это нормально. Но когда я снова вернусь к своему первому фрагменту, я вижу список, отсортированный как раньше, но поиск рушится. Единственный способ вернуть исходный список - щелкнуть поисковый запрос один раз и закрыть его.

Как сбросить поиск по первому фрагменту, когда я перейду ко второму фрагменту, или как сохранить открытое окно поиска, когда я прихожу к первому фрагменту?

Любое из решений будет выполнено.

<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; 
       } 
      }); 
    } 

ответ

3

Для тех, кто до сих пор ломают голову, и не в состоянии найти решение, вот это, как вы это делаете. Это довольно просто:

Просто присвойте идентификатор поисковым запросам при его создании (создав файл ids.xml и зарезервировав там идентификатор и назначив его во время выполнения). Теперь в onTabUnselected() метод действия основной вкладки, идентифицируйте поисковые запросы и дважды используйте функцию setIconified (true) (один для удаления текста и один для сглаживания поискового запроса).

Не забудьте добавить проверку нулевой строки запроса в методе onQueryTextChange вашего поиска, это создало проблему для меня.

+0

Быстрое и простое решение !! – Shruti

2

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); 
     } 
    } 

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

+0

Perfect решение ..! –

Смежные вопросы