как найти позицию элемента в AutoCompletetextview, заполненном массивом

У меня есть массив (массив1 с States) и AutoCompleteTextview, в котором я заполняю его массивом1. Когда я выбираю значение из AutocompleteTextView, я выбираю state из раскрывающегося списка AutoCompleteTextView

Я хочу получить позицию элемента из массива1, который я выбрал.
Я пробовал OnClickEvent из AutocompelteTextView.

STATE.setOnItemClickListener(new OnItemClickListener(){

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

Это дает мне значение, которое я выбрал из раскрывающегося списка, но я хочу получить position of the value в array1. Например, у меня есть массив размером 4, например array1 = {A,B,C,D}, и если я выберу B, он должен вернуть мне позицию B в массиве, т.е. 2.

Надеюсь, я ясно дал понять. Заранее спасибо.


person raghav chopra    schedule 29.11.2012    source источник
comment
Вы можете использовать переменную int position для позиции значения в onItemClick Listener.   -  person Chirag    schedule 29.11.2012
comment
Item.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView‹?› parent, View view, int position, long id) { //// id содержит элемент, если из базы данных ItemNoSelected = id; } }) ; --- здесь id - это id из базы данных   -  person Vijay    schedule 07.07.2015


Ответы (4)


Используйте переменную position в файле onItemClick.

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
    }
});
person Ram kiran    schedule 29.11.2012
comment
это не дает мне правильную позицию. Мне нужна позиция переменной из массива, но она дает позицию из AutocompleteDropdown, которую я вижу - person raghav chopra; 29.11.2012
comment
Но что, если это не Array, а ArrayList‹String› - person raghav chopra; 29.11.2012
comment
Проблема в том, что в автозаполнении есть два одинаковых имени. - person Marlon; 28.10.2016
comment
помните, никогда не сравнивайте строку - person kemdo; 26.11.2017

Используйте список вместо массива. Реализуйте onItemClickListener для AutoCompleteTextView, затем используйте indexOf в своем списке, чтобы найти индекс выбранного элемента.

actvCity.setOnItemClickListener(new OnItemClickListener() {

     @Override
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
          long arg3) {
          int index = cityNames.indexOf(actvCity.getText().toString());
          // Do Whatever you want to do ;)
     }
});
person SANAT    schedule 18.11.2014

Item.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    //// id contains item if from database
                    ItemNoSelected = id;
                }
            });

id из базы данных, мы можем использовать это

person Vijay    schedule 07.07.2015

Вы можете найти родительскую строку в прослушивателе clickItem. OSchools в данном случае — это пользовательский ArrayList.

Object item = parent.getItemAtPosition(position);
for(OSchools d : data){
Log.e("name",d.getName());
String name = d.getName();
if(d.getName() != null && name.contains(item.toString())){
       ID = d.getID();
}
person Gerardo Salazar Sánchez    schedule 22.11.2018
comment
Ответ, основанный только на коде, не считается правильным ответом SO. Не могли бы вы добавить пояснение к вашему коду? (из обзора) - person FrankS101; 22.11.2018