Я получаю значения из API (какой список имен с идентификатором, который я сохранил в модели) - как установить для этого имени значение автозаполнения и получить как имя, так и идентификатор при выборе раскрывающегося списка. Это установит имя в автозаполнении и получит имя в onItemClick, но как получить идентификатор?
Класс модели
public class MeetingContactModel implements Serializable {
private String id;
private String text;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
Класс MyActivity При создании: вызов адаптера автозаполнения
setMeetingContactAuto(autoContact, contactList);
autoContact.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
strContact =(String) parent.getItemAtPosition(position);
// strContactCode = code.get(position);
}
});
private void setMeetingContactAuto(AutoCompleteTextView autoContact, final ArrayList<MeetingContactModel> xcontactList) {
List<String> names = new AbstractList<String>() {
@Override
public int size() { return xcontactList.size(); }
@Override
public String get(int i) {
code.clear();
code.add(xcontactList.get(i).getText());
return xcontactList.get(i).getText();
}
};
autoContact.setThreshold(1);
autoContact.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, names));
}
Не удалось получить идентификатор. Пожалуйста, дайте мне знать, чтобы получить его.
создать собственный адаптер для AutoCompleteTextView
"but how to get ID"
? см. последний параметр, переданный методу onItemClick
как насчет перехода с parent.getItemAtPosition(position)
на contactList.get(position).getId()
@pskink Я думаю, что он имел в виду "Id"
в своем наборе данных. Насколько я понимаю, я думаю, что он хочет показать и имя, и идентификатор в раскрывающемся списке автозаполнения.
@Emil OP сказал: "This will set a Name in autocomplete and getting name at onItemClick but how to get ID?"
- так что я думаю, что он хочет удостоверение личности внутри onItemClick
@pskink — нужно показать только имя и получить как имя, так и идентификатор (значения набора данных) в ItemClick из раскрывающегося списка автозаполнения.
откуда у тебя xcontactList
? для чего вам нужен new AbstractList
?
xContactList — это ArrayList<MeetingContactModel> . AbstractList просто для отображения отфильтрованных имен в раскрывающемся списке.
xcontactList
исходит из какой-то sqlite db? почему бы вам не использовать какой-нибудь специализированный адаптер Filterable
для фильтрации ваших данных?
из ответа API
Реализуйте метод toString() в классе вашей модели.
public class MeetingContactModel implements Serializable {
private String id;
private String text;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
@Override
public String toString() {
return text;
}
}
// Fetch your selected model
autoContact.setAdapter(new ArrayAdapter<>(requireContext(), R.layout.spinner_item_ranking, contactList));
autoContact.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
MeetingContactModel m=(MeetingContactModel) parent.getItem(position);
String name=m.getText();
String id=m.getId();
}
});
попробую это и дам вам знать
MeetingContactModel m = (MeetingContactModel) parent.getItem (позиция); он показывает исключение, поскольку не может разрешить метод «getItem (int)» !!! Есть идеи?
Это работает после изменения getItem (int) на getItemAtPosition (int) - спасибо @Rajasekaran M
@ArnoldBrown, если он работает, примите ответ и поддержите его.
@ArnoldBrown вы вызываете getItem()
из вашего объекта адаптера. вот почему это показывает. создайте объект для адаптера и вызовите `getItem(position)
вы получили какую-либо ошибку