0

Я пытаюсь использовать AutoCompleteTextView, чтобы выбрать элемент из потенциально длинного списка элементов-кандидатов. Я могу отобразить список в порядке, и я могу получить вызов onItemClick, когда пользователь выбирает один из предложений автозаполнения. Проблема заключается в том, что «позиция», указанная в onItemClick, - это позиция в раскрывающемся списке фильтрованных элементов, а не позиция в исходном списке кандидатов.AutoCompleteTextView - как определить, какой элемент исходного списка был выбран?

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

Я пробовал подкласс AutoCompleteTextView и переопределял onCommitCompletion, который должен указывать исходный индекс списка, но он не вызывается, когда элемент выбран.

Я также попытался подклассифицировать BaseAdapter, чтобы я мог сгенерировать представления для списка автозаполнения самостоятельно и setTag с объектом приложения для каждого элемента, но AutoCompleteTextView не будет принимать подкласс BaseAdapter для setAdapter.

Не могу поверить, что нет способа сделать это без полной перезаписи AutoCompleteTextView.

Надеясь, что у кого-то есть ответ!

+0

Я знаю, что вам нужно здесь. К сожалению, ваш вопрос не привлек внимания, поскольку у вас не было кода. Я поставил вопрос, следуйте за ним. http://stackoverflow.com/questions/17425139/2-autocompletetextviews-how-to-know-which-view-has-been-selected – Siddharth

ответ

0

Я не совсем уверен, как вы это сделаете, но убедитесь, что ваш адаптер правильно назначил id, а затем используйте это значение в обратном вызове.

0
STATE.setOnItemClickListener(new OnItemClickListener(){ 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long rowId) { 
     String selection = (String) parent.getItemAtPosition(position); 
     int pos = -1; 

     for (int i = 0; i < yourarray.length; i++) { 
      if (yourarray[i].equals(selection)) { 
       pos = i; 
       break; 
      } 
     } 
     System.out.println("Position " + pos); //check it now in Logcat 
    } 
});