автозаполнение Android

1

Как я могу получить абсолютное положение моего объекта, выбранного автозаполнением. Когда я использую arg2, найдите относительное положение в раскрывающемся списке автозаполнения. Я хочу, чтобы позиция выбранного объекта была в моем первоначальном списке.

Мой код:

        AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_friends);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, friendsListNameOrder);
        textView.setAdapter(adapter);

        textView.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            friendsListNameOrder.get(arg2);

            }
Теги:

2 ответа

2
Лучший ответ

Наверное, не так элегантно, как вы надеялись:

    final String[] COUNTRIES = new String[] { "Belgium", "France", "Italy",
            "Germany", "Spain" };

    final AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.AutoCompleteTextView01);
    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            R.layout.log_item, COUNTRIES);

    textView.setAdapter(adapter);

    textView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            String s = ((TextView) arg1).getText().toString();
            Log.e("Test", s + " position: "
                    + getArrayIndex(COUNTRIES, s));
        }
    });

где getArrayIndex:

public final int getArrayIndex(String[] myArray, String myObject) {
    int ArraySize = Array.getLength(myArray);// get the size of the array
    for (int i = 0; i < ArraySize; i++) {
        if (myArray[i].equals(myObject)) {
            return (i);
        }
    }
    return (-1);// didn't find what I was looking for
}
  • 0
    Хорошо .... если у меня есть две равные страны ... пример: СТРАНЫ = новая строка [] {"Бельгия", "Франция", "Италия", "Германия", "Испания", "Испания"};
  • 0
    он вернет первый экземпляр списка. Обратите внимание, что вы на самом деле смотрите не на список, а скорее на курсор к списку: поэтому я беру выбранное значение и возвращаю его для поиска в исходном массиве. Если вам нужно однозначно определить две совпадающие строки, это автозаполнение, вероятно, не ваш лучший выбор. Или вам понадобится адаптер, который ссылается на объект, имеющий столбец идентификаторов.
0

Вы можете создать настраиваемый адаптер, который расширяет ArrayAdapter и отменяет метод getPosition(). В коде метода вы получаете позицию из исходного списка данных.

@Override
public int getPosition(Object item) {
    return friendsListNameOrder.indexOf(item);
}

Хотя я предполагаю, что это может вызвать некоторые осложнения, может быть полезно, когда вы начнете добавлять дополнительные функции.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню