2016-07-19 10 views
0

Hallo in meinem Projekt habe ich eine Objektklasse namens "Program" mit vielen Werten wie einem, ein Array namens "Category" gemacht. Alle Programme werden durch eine ListView angezeigt und haben eine festgelegte Kategorie Spinner im Layout (mit dem Zweck, die Programme mit den passenden Kategorien zu kategorisieren).Filtern einer ListView von Objekten mit einem Spinner um einen Wert innerhalb des Objekts für Android

Ich habe dieses Stück Code:

final ArrayAdapter spinnerAdapter = new ArrayAdapter(getActivity(), R.layout.layout_spinner, MainActivity.categories); //MainActivity.categories is an array filled with strings 

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

     String text = spinner.getSelectedItem().toString(); 
     listAdapter.getFilter().filter(text); 
     listAdapter.notifyDataSetChanged(); 
    } 

Program.java

public class Program { 

    public String programName; 
    public ArrayList<String> categories; 

    ..... 

    public ArrayList<String> getCategories() { 
     return categories; 
    } 

    public String toString() { 
     return programName; 
    } 
} 

aber nur, Filter nach dem Text auf der Liste, wie kann ich es filtern erhalten, indem die Category Variable in der Liste der Programme?

+0

Sie müssen mehr zeigen, Programmklasse Kategorie und auch, wie Sie den Spinner auffüllen. Die Art und Weise, wie U es tun würde, besteht darin, nach Kategorien fast genauso zu filtern wie mit dem Text. Bis ich mehr sehe ist schwer eine richtige Lösung zu geben. –

+0

@AndreiT Ich habe gerade den Beitrag bearbeitet, der mehr Code hinzufügt. Ich glaube nicht, dass das Filtern einer Variablen dasselbe ist wie das Filtern des Textes, da diese Filtermethode nur zum Text – user2514575

+0

aufgefordert wird. Geben Sie ein Beispiel dafür, wie Sie nach Kategorie filtern möchten. Weil ich nicht so sicher bin, habe ich verstanden, was du erreichen willst. –

Antwort

0

Nun,

Zuerst hier einen Blick und ein wenig über Filterung verstehen:

Adapter filtering android

Als nächstes denke ich, in Ihrem Fall, dass Sie Folgendes zu tun haben:

@Override 
protected FilterResults performFiltering(CharSequence constraint) { 
    FilterResults results = new FilterResults(); 
    // We implement here the filter logic 
    if (constraint == null || constraint.length() == 0) { 
     // No filter implemented we return all the list 
     results.values = yourList; 
     results.count = yourList.size(); 
    } 
    else { 
    // We perform filtering operation 
    List<Program> finalList = new ArrayList<Program>(); 
    //here think of something regarding the upper and lower cases. 
    for (Program p : yourList) {    
     if(p.getCategories(). 
       contains(constraint.toString())) 
     finalList.add(p); 
    } 

    results.values = finalList; 
    results.count = finalList.size(); 
    } 
    return results; 
} 
+0

Das sieht so aus, als müsste es funktionieren. Wo soll ich das hinstellen? Soll ich eine ArrayAdapter-Klasse erstellen? – user2514575

+0

Schauen Sie sich den Beispielcode an, alles ist da –

+0

oder ... https: //gist.github.com/tobiaschuerg/3554252. Es sollte dir einen Anfang geben. –

Verwandte Themen