kerry
kerry

Reputation: 2562

Reset the SearchView on fragment change in ViewPager with ActionBar tabs

I have implemented two fragments with ActionBar tabs. I am using Sherlock fragments. When I start a fragment I create a searchview on the action bar.

The problem is: When I search something on the first fragment and without closing the searchview or deleting the text, I move to the next fragment, I get a collapsed searchview, which is fine. But when I again get back to my first fragment, I see a list sorted like before but the searchview is collapsed. The only way to get back the original list is to click the searchview once and closing it.

How do I reset the searchview on the first fragment when I move to second fragment or how can keep the searchview open when I come to the first fragment?

Any one of the solutions will do.

<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>

This is how I am inflating in the fragment

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

Upvotes: 4

Views: 4365

Answers (2)

Alexander Khyzhun
Alexander Khyzhun

Reputation: 381

Android gives you methods like onCreate and onDestroy to work with activity and also for the menus onCreateOptionsMenu and onDestoryOptionsMenu. You can use onDestroyOptionsMenu method to clear your SearchView or to realize your another ideas.

for example:

    @Override
    public void onDestroyOptionsMenu() {
       super.onDestroyOptionsMenu();

       if (searchView != null && 
          !searchView.getQuery().toString().isEmpty()) {

          searchView.setIconified(true);
          searchView.setIconified(true);
       }
    }

It works for me, good Luck.

Upvotes: 5

kerry
kerry

Reputation: 2562

For those who are still scratching their heads and are not able to find a solution, here it how you do it. It is pretty simple:

Just assign an ID to your searchviews when you are creating it (by creating the ids.xml and reserving the id there and assigning it on runtime). Now in onTabUnselected() method of the main tab activity, identify the searchviews and use function setIconified(true) twice (one to remove the text and one to collapse the searchview).

Do not forget to add a check for null query string in onQueryTextChange method of your searchview, it created a problem for me.

Upvotes: 5

Related Questions