2016-07-29 52 views
0

Ich habe eine Json Arraylist. Setzen Sie hier bereits die Adapterdatei mit dieser Autocomplete-Textansicht.Android AutocompleteTextview Vorschlag zeigt von 2 Felder

Von meinem Code:

ich eine Wrapper-Klasse wie USER verwendet haben. In dieser Klasse sind 3 Felder (userid, username and designation).

Hier muss ich einige Textmittel schreiben müssen die Vorschläge von Benutzernamen und designation.wenn das Tippwort aus einem dieser beiden Felder entspricht Vorschläge müssen angezeigt werden.

Wie kann ich mit der AutoCompleteTextView tun.

ArrayAdapter<User> userAdapter = new ArrayAdapter<>(getActivity(), R.layout 
           .spinner_item_text, 
           UserList); 

Jetzt die Vorschläge im Array angezeigt. Aber ich muss den Vorschlag wie eine Saite zeigen.

Für Beispiel:

Userlist, die Werte wie

{ 
    "profile_view": [ 
    { 
username :"test",designation:"SE" 
    }, 
{ 
username :"test1",designation:"TE" 
    }]} 

jetzt das Stichwort in der Box tippt mit wie "t" Mittel müssen die Vorschläge wie

test 
test1 
TE 

geben, wie Kann ich tun ? Bitte geben Sie mir Ideen, um dies zu implementieren?

+0

fügen Sie Ihre Werte (test, test1 usw.) zu 'Array' hinzu. Dann mache 'ArrayAdapter'. Danach fügen Sie den Adapter zu 'AutoCompleteTextView' hinzu. –

+0

siehe [this] (http://stackoverflow.com/a/19860624/2252830) antwort – pskink

Antwort

0

Schreiben Sie einen benutzerdefinierten Adapter und verwenden Sie benutzerdefinierte Filterung in diesem Adapter. Im folgenden Code ist SearchSuggestion mein Modell. Sie können das Modell ändern und die Suchbedingung in der Methode performFiltering() ändern. Hoffe das hilft!

public class SearchSuggestionAdapter extends ArrayAdapter<SearchSuggestion> implements Filterable { 

    private Context mContext; 
    private List<SearchSuggestion> mSuggestionList; 
    private List<SearchSuggestion> mFilteredSuggestionList; 

    public SearchSuggestionAdapter(Context context, List<SearchSuggestion> suggestionList) { 
     super(context, -1); 
     mContext = context; 
     mSuggestionList = suggestionList; 
     mFilteredSuggestionList = mSuggestionList; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder viewHolder; 
     if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.suggestion_item, null); 
     viewHolder = new ViewHolder(); 
     viewHolder.mSuggestionTextView = (TextView) convertView.findViewById(R.id.suggestion_text); 
     viewHolder.mSuggestionImage = (ImageView) convertView.findViewById(R.id.suggestion_image); 
     convertView.setTag(viewHolder); 
     } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
     } 
     SearchSuggestion searchSuggestion = mFilteredSuggestionList.get(position); 
     viewHolder.mSuggestionTextView.setText(searchSuggestion.getName()); 
     viewHolder.mSuggestionImage.setImageResource(searchSuggestion.isTag() ? R.drawable.suggestion_tag_icon : R.drawable.suggestion_project_icon); 
     return convertView; 
    } 

    public static class ViewHolder { 
     private ImageView mSuggestionImage; 
     private TextView mSuggestionTextView; 
    } 

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

    @Override 
    public SearchSuggestion getItem(int position) { 
     return mFilteredSuggestionList.get(position); 
    } 

    @Override 
    public Filter getFilter() { 
     return new Filter() { 
     @Override 
     protected FilterResults performFiltering(CharSequence constraint)  { 
     final FilterResults results = new FilterResults(); 
     if (constraint != null && constraint.length() > 0) { 
      constraint = constraint.toString().toLowerCase(); 
      List<SearchSuggestion> tempFilteredList = new ArrayList<>(); 
      for (SearchSuggestion suggestion : mSuggestionList) { 
       String name = suggestion.getName(); 
       if (name != null && name.toLowerCase().contains(constraint)) { 
        tempFilteredList.add(suggestion); 
       } 
      } 
      results.values = tempFilteredList; 
      results.count = tempFilteredList.size(); 
     } else { 
      results.values = mSuggestionList; 
      results.count = mSuggestionList.size(); 
     } 
     return results; 
    } 

    @SuppressWarnings("unchecked") 
    @Override 
    protected void publishResults(CharSequence constraint, FilterResults results) { 
     if (results.values != null) { 
      mFilteredSuggestionList = (ArrayList<SearchSuggestion>) results.values; 
      notifyDataSetChanged(); 
     } 
    } 
}; 
} 
} 
0

Wenn Sie Ihren Benutzernamen und wollen die Bezeichnungen als Vorschlag in der Drop-Down, dann alle Benutzernamen hinzufügen und die Bezeichnungen in einem Array und es an den Adapter übergeben.