2013-04-29 2 views
1

Я хотел бы использовать текстовое представление автозаполнения android с настраиваемыми выпадающими списками (не только строка будет включена). Он работает особым образом: он находит соответствующие элементы в моем arraylist, и если я нажму на элемент, в текстовом поле появится правильная строка. Однако выпадающее меню не отображает правильные строки, но первые X-записи (где x - число_из_результатов) моего arraylist. Пример: arraylist: a, b, c, aa, ab, ac Введенный текст: a my resaults: a, b, c, aa (обратите внимание на количество отказов) , и если я нажму на b, textview получает aa (второй результат)Autocompleteview с настраиваемым элементом списка не работает должным образом

Как я понимаю, у меня проблемы с моим адаптером или с моим классом customAutoComplete. Вот мой класс CustomAutoCompleteView.

public class CustomAutoCompleteView extends AutoCompleteTextView { 


public CustomAutoCompleteView(Context context) { 
    super(context); 
} 

public CustomAutoCompleteView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public CustomAutoCompleteView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

@Override 
public boolean enoughToFilter() { 
    return true; 
} 



protected void onFocusChanged (boolean focused, int direction, Rect previouslyFocusedRect) 
{ 
    if(focused) 
     performFiltering("", 0); 
    super.onFocusChanged(focused, direction, previouslyFocusedRect); 
} 

И это мой listadapter:

public class ListAdapter extends ArrayAdapter<StopData> { 

public ListAdapter(Context context, int textViewResourceId) { 
    super(context, textViewResourceId); 
    // TODO Auto-generated constructor stub 
} 

private List<StopData> stops; 

public ListAdapter(Context context, int resource, List<StopData> stops) { 

    super(context, resource, stops); 

    this.stops = stops; 

} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View v = convertView; 

    if (v == null) { 

     LayoutInflater vi; 
     vi = LayoutInflater.from(getContext()); 
     v = vi.inflate(R.layout.megalloelem, null); 

    } 

    StopData p = stops.get(position); 

    if (p != null) { 

     TextView stopname = (TextView) v.findViewById(R.id.megallo); 

     if (stopname != null) { 
      stopname.setText(p.name); 
     } 
    } 

    return v; 

} 

Функция GetView уже получает "неправильные" индексы, так что проблема не (только) есть. Любые идеи, как получить индексы результатов от оригинального arraylist? С уважением, paland3

ответ

0

Использование

StopData p = getItem(position); 

вместо

StopData p = stops.get(position); 

Это происходит потому, что адаптер обрабатывает фильтрацию, и он будет возвращать правильный пункт.

Смежные вопросы