Выбранный элемент текстового представления Autocomplete Показать как простое текстовое изображение?

Я использую Autocomplete Textview, который показывает некоторые имена из базы данных. Я хочу показать имя в текстовом представлении, которое я выбрал из автозаполнения textview. Вот мой код:

ArrayList<String> s1 = new ArrayList<String>();

      for (StudentInfo cn : studentInfo) {
            s1.add(cn.getName());
        }
        ArrayAdapter<String> adapter =  new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,s1); 
       a1.setThreshold(1); 
        a1.setAdapter(adapter);

a1.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
    }
        });

Ответ 1

Попробуйте так:

AutoCompleteTextView a1 = (AutoCompleteTextView) findViewById(...);

StudentInfo[] s1 = studentInfo.toArray(new StudentInfo[studentInfo.size()]);

ArrayAdapter<StudentInfo> adapter = new ArrayAdapter<StudentInfo>(this, android.R.layout.simple_dropdown_item_1line, s1);
a1.setAdapter(adapter);
a1.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View arg1, int position, long arg3) {
        Object item = parent.getItemAtPosition(position);
        if (item instanceof StudentInfo){
        StudentInfo student=(StudentInfo) item;
            doSomethingWith(student);
        }
    }
});

ArrayAdapter использует метод toString() для StudentInfo для генерации отображаемых текстов, поэтому вам нужно реализовать хороший метод toString.

Таким образом, такая реализация может быть адаптирована к любому типу объекта.

Btw: я предпочитаю android.R.layout.simple_spinner_dropdown_item вместо android.R.layout.simple_dropdown_item_1line

Ответ 2

Благодарность Стефану Рихтеру! Я хотел бы добавить, что при построении адаптера можно использовать List<T> непосредственно:

AutoCompleteTextView autoCompleteTextView = dialogView.findViewById(R.id.autoComplete);
            // Where mStudentsInfo is List<StudentInfo>
            ArrayAdapter<StudentInfo> adapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, mStudentsInfo);
            autoCompleteTextView.setAdapter(adapter);
            autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Object item = parent.getItemAtPosition(position);
                    if (item instanceof StudentInfo) {
                        StudentInfo studentInfo = (StudentInfo) item;
                        // do something with the studentInfo object
                    }
                }
            });

Кроме того, не забудьте переопределить метод toString() в StudentInfo.class:

public class StudentInfo {

....

    @Override
    public String toString() {
        return studentName;
    }
}

Ответ 3

Из объекта просмотра arg1 получить значение String. Из ArrayList, предоставленного для AutoCompleteTextView, получите позицию элемента, используя эту строку.

в вашем случае код будет выглядеть примерно так:

int selectedPos = s1.indexOf((String) ((TextView) arg1).getText());

selectedPos - это позиция строки в предоставленном ArrayList.

Ответ 4

ваш s1 содержит все имена из database

a1.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                    long arg3) {
            Log.d("your selected item",""+s1.get(position));
            //s1.get(position) is name selected from autocompletetextview
            // now you can show the value on textview. 
    }
        });

надеюсь, что это поможет вам,

Ответ 5

переопределить toString метод для класса модели (StudenInfo в этом случае) - это не очень хорошая идея!
Если вы хотите получить текст выбранного элемента, используйте этот код:

 autoCompleteView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String selectedItem = (String) parent.getItemAtPosition(position);
                // here is your selected item
            }
        });

Ответ 6

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

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long arg3) {
    int selectedPos = getYourList().indexOf((((TextView)view).getText()).toString());
    SomeDAO dao = getSomeDaoList().get(selectedPos);
    //do your code
}

Примечание. Я изменил имена параметров по умолчанию в onItemClick как arg0-parent, arg1-view, arg2-position и SomeDAO - пользовательский тип данных

Ответ 7

Использовать родительскую позицию - '0'

  txt_search.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View arg1, int position, long id) {
            Object item = parent.getItemAtPosition(0);
            if (item instanceof MYData{
                MYData data=(MYData) item;
                String dd = data.getName();
            }
        }
    });