Separate searchview für Fragmente
Habe ich eine einfache Aktivität, die hat einen tabbar-wechseln zwei Fragmente. Die beiden Fragmente sind sowohl ein listFragment und Umsetzung einer searchview, um die Suche möglichst innerhalb der listfragment. Die searchview ist immer in der actionbar über der tabbar.
Habe ich das problem, dass der Eingang der searchview nicht zurückgesetzt, wenn ich schalten Sie die tab (wechseln Sie zu anderen fragment). Daher ist das zweite fragment liest die Eingabe aus der searchview und filtert die listfragment entsprechend, die tatsächlich liest den Eingang betrat ich, als ich noch im fragment.
Was ich will, ist die searchview eine separate searchview für beide Fragmente. Gibt es eine Möglichkeit, 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 einer
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, außer der Suche Teil.
InformationsquelleAutor frank1fr | 2012-11-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seine schon eine Weile aber immer noch, wenn jemand Sie finden die gleichen problem,
hier ist, wie ich es schaffte, das zu tun .
Einfach umzusetzen onPrepareOptionsMenu() in jedes Ihrer Fragmente und
innerhalb der it, call
onQueryTextChange(""); vorbei "" als query-string.
Hi es scheint hilfreich,Kann u bitte erläutern Sie diese.
dies funktioniert, Dank
Danke, aber sollte sich ändern onQueryTextChange("") searchView.setQuery("", true)
wie Sie Zugriff auf diese Weise bei der navigation drwer?
InformationsquelleAutor Puru Pawar