Получение элементов с самого начала в MultiAutoCompleteTextView при использовании пользовательского адаптера в Android вместо правильного начального места?

Я создал собственный адаптер для MultiAutoCompleteTextView, который дает мне представление для представления списка. Проблема в том, что когда я набираю любой символ, он дает правильный счет, но начальный индекс начинается с 0, поэтому я вижу неправильные имена.

    String[] personsList = {"Rahul", "Mike", "Mantu","Mathew", "Gatr", "Ahamad"};
    AutoCompleteNameAdaptor autoCompleteAdaptor = new AutoCompleteNameAdaptor(getApplicationContext(), personsList);
    CustomMultiAutoCompleteTextView personName = (CustomMultiAutoCompleteTextView) findViewById(R.id.allPeopleInvolved);
    personName.setThreshold(1);
    personName.setAdapter(autoCompleteAdaptor);
    personName.setTokenizer(new CustomMultiAutoCompleteTextView.CommaTokenizer());

Когда открывается список, он всегда показывает, что элемент списка начинается с «Рахул», даже когда я набираю «m», но количество остается равным 3, поэтому 3 элемента начинаются с элемента 0.

Это отлично работает в android arrayAdaptor, который:

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, personsList);

Должен ли я отлаживать, чтобы понять, почему он не передает правильные индексы в функцию getView моего адаптера, или мне нужно настроить какой-то алгоритм сортировки для сортировки списка и снова обновить его в адаптере, если да, то где?

Пользовательский код адаптера

public class AutoCompleteNameAdaptor  extends ArrayAdapter<String> {

LayoutInflater inflater;
String[] listItems;

public AutoCompleteNameAdaptor(Context context, String[] objects) {
    super(context, R.layout.people_involved_autocomplete_list, objects);
    this.listItems = objects;
     inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    GenericItemViewHolder holder;
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.people_involved_autocomplete_list, parent, false);
        holder = new GenericItemViewHolder();
        holder.personNameLabel = (TextView) convertView.findViewById(R.id.personName);
        holder.personNameLabel.setText(this.listItems[position]);
        convertView.setTag(holder);
    } else {
        holder = (GenericItemViewHolder)convertView.getTag();
    }

    return convertView;
}

@Override
public String getItem(int position) {
    return this.listItems[position];
}

public static class GenericItemViewHolder {
    public TextView personNameLabel;
    public ImageView personNameImage;
}

}


person Mitesh Sharma    schedule 11.06.2014    source источник


Ответы (1)


Применил свой собственный фильтр

@Override
public Filter getFilter() {
    if (filter == null)
        filter = new AutoCompleteFilter(listItems);
    return filter;
}

Добавил свою логику в функцию PerformFiltering.

Также в функции getView if (convertView == null) не требуется, поскольку она всегда будет показывать кешированное значение, если мы проверяем только значение null и показываем, присутствует ли элемент position.

person Mitesh Sharma    schedule 11.06.2014