AutoCompleteTextView - получить идентификатор при выборе имени

Я получаю значения из 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));
    }

Не удалось получить идентификатор. Пожалуйста, дайте мне знать, чтобы получить его.

вы получили какую-либо ошибку

Rajasekaran M 27.05.2019 07:13

создать собственный адаптер для AutoCompleteTextView

Emil 27.05.2019 07:16
"but how to get ID"? см. последний параметр, переданный методу onItemClick
pskink 27.05.2019 07:19

как насчет перехода с parent.getItemAtPosition(position) на contactList.get(position).getId()

P.Juni 27.05.2019 07:20

@pskink Я думаю, что он имел в виду "Id" в своем наборе данных. Насколько я понимаю, я думаю, что он хочет показать и имя, и идентификатор в раскрывающемся списке автозаполнения.

Emil 27.05.2019 07:24

@Emil OP сказал: "This will set a Name in autocomplete and getting name at onItemClick but how to get ID?" - так что я думаю, что он хочет удостоверение личности внутри onItemClick

pskink 27.05.2019 08:20

@pskink — нужно показать только имя и получить как имя, так и идентификатор (значения набора данных) в ItemClick из раскрывающегося списка автозаполнения.

Arnold Brown 27.05.2019 09:39

откуда у тебя xcontactList? для чего вам нужен new AbstractList?

pskink 27.05.2019 09:42

xContactList — это ArrayList<MeetingContactModel> . AbstractList просто для отображения отфильтрованных имен в раскрывающемся списке.

Arnold Brown 27.05.2019 09:49

xcontactList исходит из какой-то sqlite db? почему бы вам не использовать какой-нибудь специализированный адаптер Filterable для фильтрации ваших данных?

pskink 27.05.2019 09:51

из ответа API

Arnold Brown 27.05.2019 09:57
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
11
823
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Реализуйте метод 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();
            }
        });

попробую это и дам вам знать

Arnold Brown 27.05.2019 09:41

MeetingContactModel m = (MeetingContactModel) parent.getItem (позиция); он показывает исключение, поскольку не может разрешить метод «getItem (int)» !!! Есть идеи?

Arnold Brown 27.05.2019 09:45

Это работает после изменения getItem (int) на getItemAtPosition (int) - спасибо @Rajasekaran M

Arnold Brown 27.05.2019 09:58

@ArnoldBrown, если он работает, примите ответ и поддержите его.

Rajasekaran M 27.05.2019 10:25

@ArnoldBrown вы вызываете getItem() из вашего объекта адаптера. вот почему это показывает. создайте объект для адаптера и вызовите `getItem(position)

Rajasekaran M 27.05.2019 10:40

Другие вопросы по теме