Выбранный элемент текстового представления 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();
}
}
});