-2
J'ai un problème avec MultiAutoCompleteTextView, tout semble fonctionner correctement, écrire sur textedit je reçois les valeurs filtrées correctes, le problème lorsque je sélectionne une valeur, après le clic, je reçois textedit la mauvaise valeur, semble être la première ou la deuxième valeur des utilisateurs à la place de filterUser ... où est l'erreur?MultiAutoCompleteTextView afficher le mauvais résultat
public class AutocompleteUserAdapter extends ArrayAdapter {
private FriendOption selectedUser;
private final List<FriendOption> users;
private List<FriendOption> filteredUser = new ArrayList<>();
public AutocompleteUserAdapter(Context context, List<FriendOption> users) {
super(context, 0, users);
this.users = users;
}
@Override
public int getCount() {
return filteredUser.size();
}
public FriendOption getFilteredItemAtPosition(int pos){
return this.filteredUser.get(pos);
}
@Override
public Filter getFilter() {
return new UsersFilter(this, users);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
FriendOption user = filteredUser.get(position);
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.row_user_simple, parent, false);
TextView textViewName = (TextView) convertView.findViewById(R.id.user_name);
textViewName.setText(user.getFriend().getName() + " " + user.getFriend().getSurname());
return convertView;
}
class UsersFilter extends Filter {
AutocompleteUserAdapter adapter;
List<FriendOption> originalList;
List<FriendOption> filteredList;
public UsersFilter(AutocompleteUserAdapter adapter, List<FriendOption> originalList) {
super();
this.adapter = adapter;
this.originalList = originalList;
this.filteredList = new ArrayList<>();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
if (constraint != null) {
filteredList.clear();
if (constraint == null || constraint.length() == 0) {
filteredList.addAll(originalList);
}
else {
final String filterPattern = constraint.toString().toLowerCase().trim();
for (final FriendOption user: originalList) {
String name = user.getFriend().getName().toLowerCase();
if (name.contains(filterPattern)) {
filteredList.add(user);
}
}
}
final FilterResults results = new FilterResults();
results.values = filteredList;
results.count = filteredList.size();
return results;
} else {
return new FilterResults();
}
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results.values != null){
adapter.filteredUser.clear();
adapter.filteredUser.addAll((List) results.values);
for (FriendOption u:adapter.filteredUser){
System.out.println("user: " + u.getFriend().getName() + " " + u.getFriend().getSurname());
}
adapter.notifyDataSetChanged();
}
}
@Override
public String convertResultToString(Object resultValue) {
String result = ((FriendOption) resultValue).getFriend().getName() + " "+ ((FriendOption) resultValue).getFriend().getSurname();
return result;
}
}