Separate search for fragments

I have a simple activity that contains a tab for switching two fragments. These two fragments are both a list and implement a search to make a search possible within the list. Searchview is always displayed in the action bar above the tab.

The problem is that the input of searchview isnt reset after switching the tab (switching to another fragment). Therefore, the second fragment reads the input data from the search and accordingly filters the corresponding list, which actually reads the input entered when I was still in the fragment.

I want searchview to be a separate search for both snippets. Is there any way to achieve this?

Here is my code:

activity

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

Fragment one

 public class FragRelaties extends ListFragment implements SearchView.OnQueryTextListener { private LayoutInflater inflater; private ModelRelatie modelRelatie; private AdapterRelatie relatieAdapter; public ArrayList<Relatie> 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<Void, Void, ArrayList<Relatie>>(){ protected ArrayList<Relatie> doInBackground(Void... params) { // Get all my contacts modelRelatie = ModelRelatie.instantiate(context); ArrayList<Relatie> relaties = modelRelatie.getRelaties(); return relaties; } protected void onPostExecute(ArrayList<Relatie> 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<Relatie> 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; } 

Fragment 2

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

Both fragments are almost identical, except for the search part.

+6
source share
1 answer

It has been quite a long time, but still, if someone finds the same problem, here is how I was able to do it.

Just implement onPrepareOptionsMenu () in each of your fragments and inside this call to onQueryTextChange ("); passing" "as a query string.

+10
source

All Articles