title: Separate searchview for fragments
body: <p>I have a simple activity which holds a tabbar to switch two fragments. The two fragments are both a listFragment and implement a searchview to make searching possible within the listfragment. The searchview is always shown in the actionbar above the tabbar. </p>
  
  <p>The problem I have is that the input of the searchview isn’t reset once I switch the tab (go to other fragment). Therefore, the second fragment reads the input from the searchview and filters the listfragment accordingly, which actually reads the input I entered when I was still in fragment one. </p>
  
  <p>What I want is the searchview to be a separate searchview for both fragments. Is there a way to  achieve this?</p>
  
  <p>Here is my code:</p>
  
  <p><strong>Activity</strong></p>
  
  <pre><code>public class ActivityMainApp extends Activity implements ActionBar.TabListener {
  
  private FragmentManager fragmentManager = getFragmentManager();
  
  @Override
  public void onCreate(Bundle icicle) {
  
      super.onCreate(icicle);
  setContentView(R.layout.mainapp);
  
      ActionBar actionBar = getActionBar();
      actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
  
      // Add tabs
      ActionBar.Tab relatieTab = actionBar.newTab().setText("Relaties");
      ActionBar.Tab takenTab = actionBar.newTab().setText("Taken");
      //ActionBar.Tab urenTab = actionBar.newTab().setText("Uren");
  
      // Listeners 
      relatieTab.setTabListener(this);
      takenTab.setTabListener(this);
  
      // Tabs toevoegen aan actionbar
  actionBar.addTab(relatieTab);
  actionBar.addTab(takenTab);
  
      // Create fragmentmanager to switch fragments
      FragmentTransaction fragmentTransaction = this.fragmentManager.beginTransaction();
      Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_content);
  
      if(fragment == null){
          FragmentTransaction ft = fragmentManager.beginTransaction();
          ft.add(R.id.fragment_content, new FragRelaties());
      }
  
  }
  
  public void onTabSelected(Tab tab, FragmentTransaction ft) {
  
      FragmentTransaction fragmentTransaction = this.fragmentManager.beginTransaction();
  
      if(tab.getText().equals("Taken")){
          FragTaken fragment = new FragTaken();
          fragmentTransaction.replace(R.id.fragment_content, fragment);
          fragmentTransaction.commit();
      }
  
      if(tab.getText().equals("Relaties")){
          FragRelaties fragment = new FragRelaties();
          fragmentTransaction.replace(R.id.fragment_content, fragment);
          fragmentTransaction.commit();
      }
  
  }
  
  public void onTabUnselected(Tab tab, FragmentTransaction ft) {
  
  }
  
  public void onTabReselected(Tab tab, FragmentTransaction ft) {
  
  }
  
  }
  </code></pre>
  
  <p><strong>Fragment one</strong></p>
  
  <pre><code>public class FragRelaties extends ListFragment implements SearchView.OnQueryTextListener {
  
  private LayoutInflater inflater;
  private ModelRelatie modelRelatie;
  private AdapterRelatie relatieAdapter;
  public ArrayList&lt;Relatie&gt; relaties;
  
  public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  
          this.inflater = inflater;
  
          Activity activity = getActivity();
          final Context context = activity.getApplicationContext();
  
          setHasOptionsMenu(true);
  
  
          new AsyncTask&lt;Void, Void, ArrayList&lt;Relatie&gt;&gt;(){
  
              protected ArrayList&lt;Relatie&gt; doInBackground(Void... params) {
  
                  // Get all my contacts
                  modelRelatie = ModelRelatie.instantiate(context);
                  ArrayList&lt;Relatie&gt; relaties = modelRelatie.getRelaties();
  
                  return relaties;
  
              }
              protected void onPostExecute(ArrayList&lt;Relatie&gt; relaties) {
  
                  // Initial input of objects in the list
                  relatieAdapter = new AdapterRelatie(inflater.getContext(), R.layout.relatieslijstitem, relaties);
                  setListAdapter(relatieAdapter);
  
              }
  
          }.execute();
  
          View view = inflater.inflate(R.layout.relaties, container, false);
  
          return view;
  
  }
  
  @Override
  public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
  
  inflater.inflate(R.menu.relatie_menu, menu);
  
              // Get the searchview
      MenuItem zoekveld = menu.findItem(R.id.zoekveld_fragrelatie);
      SearchView zoekview = (SearchView) zoekveld.getActionView();
  
      // Execute this when searching
      zoekview.setOnQueryTextListener(this);
  
      super.onCreateOptionsMenu(menu, inflater);
  
  }
  
  public void onListItemClick(ListView l, View v, int position, long id) {
     // Things that happen when i click on an item in the list
  }
  
  public boolean onQueryTextSubmit(String query) {
      return true;
  }
  
  public boolean onQueryTextChange(String zoekterm) {
  
      Activity activity = getActivity();
      Context context = activity.getApplicationContext();
  
      // We start searching for the name entered
      ModelRelatie modelRelatie = ModelRelatie.instantiate(context);
      ArrayList&lt;Relatie&gt; relaties = modelRelatie.zoekRelatie(zoekterm);
  
      // The returned objects are placed in the list
      this.relatieAdapter = new AdapterRelatie(inflater.getContext(), R.layout.relatieslijstitem, relaties);
      setListAdapter(relatieAdapter);
  
      return true;
  
  }
  </code></pre>
  
  <p><strong>Fragment Two</strong></p>
  
  <pre><code>public class FragTaken extends ListFragment implements SearchView.OnQueryTextListener {
  
  private LayoutInflater inflater;
  private AdapterTaak adapterTaak;
  private ModelTaken modelTaken;
  
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  
          this.inflater = inflater;
  
          Activity activity = getActivity();
          final Context context = activity.getApplicationContext();
  
          setHasOptionsMenu(true);
  
          this.modelTaken = ModelTaken.instantiate(context);
          ArrayList&lt;Taak&gt; taken = modelTaken.getTaken();
  
          // Initial input for the list
          adapterTaak = new AdapterTaak(inflater.getContext(), R.layout.takenlijstitem, taken);
          setListAdapter(adapterTaak);
  
          View view = inflater.inflate(R.layout.taken, container, false);
          return view;
  
  }
  
  @Override
  public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
  
  inflater.inflate(R.menu.taken_menu, menu);
  
      // get the searview
      MenuItem zoekveld = menu.findItem(R.id.zoekveld_fragtaken);
      SearchView zoekview = (SearchView) zoekveld.getActionView();
  
      // Execute this when searching
      zoekview.setOnQueryTextListener(this);
  
      super.onCreateOptionsMenu(menu, inflater);
  
  }
  
  public boolean onQueryTextSubmit(String query) {
      return true;
  }
  
  public boolean onQueryTextChange(String zoekterm) {
  
      Activity activity = getActivity();
      Context context = activity.getApplicationContext();
  
      // Search the task by the inputed value
      ModelTaken modelTaken = ModelTaken.instantiate(context);
      ArrayList&lt;Taak&gt; taken = modelTaken.zoekTaak(zoekterm);
  
      // Return the found items to the list
      this.adapterTaak = new AdapterTaak(inflater.getContext(), R.layout.takenlijstitem, taken);
      setListAdapter(adapterTaak);
  
      return true;
  
  }
  
  }
  </code></pre>
  
  <p>Both fragments are almost identical except the searching part.</p>