2016-04-20 9 views
1

Ich versuche, einige Elemente in meinem Array-Adapter von AutoCompleteTextView von Google Places API ausblenden. Mehr spezifisch möchte ich die Elemente tha ihre position%2==0 verstecken. Ich fand einige Antworten in Stack-Überlauf, der dies in getView wie dies zu tun, schlägt vor:Elemente aus Array-Adapter ausblenden, nicht entfernen

@Override 
public View getView(int position, View view, ViewGroup parent) { 
    if(position%2==0) { 
     //something to do here 
    } 
    return view; 
} 

aber ich weiß nicht, was ich im Kommentarbereich zu tun haben. Hier

ist der gesamte Code:

class GooglePlacesAutocompleteAdapter extends ArrayAdapter implements Filterable { 
    private ArrayList resultList; 

    public GooglePlacesAutocompleteAdapter(Context context, int textViewResourceId) { 
     super(context, textViewResourceId); 
    } 

    @Override 
    public int getCount() { 
     return resultList.size(); 
    } 

    @Override 
    public Object getItem(int index) { 
     return resultList.get(index); 
    } 

    @Override 
    public View getView(int position, View view, ViewGroup parent) { 
     if(position%2==0) { 
      //view.setVisibility() maybe? 
     } 
     return view; 
    } 

    @Override 
    public Filter getFilter() { 
     Filter filter = new Filter() { 
      @Override 
      protected FilterResults performFiltering(CharSequence constraint) { 
       FilterResults filterResults = new FilterResults(); 
       if (constraint != null) { 
        // Retrieve the autocomplete results. 
        resultList = autocomplete(constraint.toString()); 
        // Assign the data to the FilterResults 
        filterResults.values = resultList; 
        filterResults.count = resultList.size(); 
       } 
       return filterResults; 
      } 

      @Override 
      protected void publishResults(CharSequence constraint, Filter.FilterResults results) { 
       if (results != null && results.count > 0) { 
        notifyDataSetChanged(); 
       } else { 
        notifyDataSetInvalidated(); 
       } 
      } 
     }; 
     return filter; 
    } 
} 

Antwort

1

Tun Sie es in getCount() und getItem():

@Override 
public int getCount() { 
    return resultList.size()/2; 
} 

@Override 
public Object getItem(int index) { 
    return resultList.get(index * 2 + 1); 
} 

Nur stellen sicher, dass Sie verwenden getItem() innerhalb getView().

+0

Danke Kris. Es funktionierte! Nicht sicher, was du meinst: Stelle sicher, dass du getItem() in getView() verwendest. Teil. Ich musste dies nicht tun –

+1

Nur, dass Sie die Formel resultList Index = Position * 2 + 1 nicht duplizieren müssten. Das wird sicherstellen, dass Sie das richtige Element aus der Liste erhalten. Nun verwendet die Oberklasse 'getView' bereits' getItem'. Wenn Sie 'getView' nicht überschreiben, müssen Sie sich um nichts kümmern, da die Oberklasse das Richtige tun wird. –