Ich habe eine einfache Aktivität, die eine Tableiste enthält, um zwei Fragmente zu wechseln. Die beiden Fragmente sind ein listFragment und implementieren eine Suchansicht, um die Suche innerhalb des listfragments zu ermöglichen. Die Suchansicht wird immer in der Aktionsleiste über der Tableiste angezeigt.Separate Suche nach Fragmenten
Das Problem, das ich habe ist, dass die Eingabe der Suchansicht nicht zurückgesetzt wird, sobald ich die Registerkarte wechseln (zu anderen Fragment wechseln). Daher liest das zweite Fragment die Eingabe aus der Suchansicht und filtert das Listenfragment entsprechend, was tatsächlich die Eingabe liest, die ich eingegeben habe, als ich noch im ersten Fragment war.
Was ich will, ist die searchview zu einem separaten searchview für beide Fragmente. Gibt es einen Weg, dies zu erreichen?
Hier ist mein Code:
Aktivität
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 eines
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 Zwei
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;
}
}
Beide Fragmente sind fast identisch mit Ausnahme des suchenden Teils.
Stuck auf das gleiche Problem. Es ist eine ganze Weile, aber wenn Sie irgendeine Antwort gefunden haben, bitte posten Sie es. –