Android: AutoCompleteTextView с пользовательским адаптером

Я написал собственный класс адаптера, расширяющий BaseAdapter, реализующий Filterable для использования с AutoCompleteTextView. Фильтрация и выбор работают нормально.

Единственная проблема заключается в том, что если щелкнуть элемент из списка, AutoCompleteTextView автоматически вызывает метод адаптера getItem(int position) и устанавливает его текст в getItem(position).toString(). Я не хочу такого поведения, поскольку я использую пользовательские объекты в базовом адаптере, и это приводит к таким строкам, как "ClassName [id=xx, variable1=var1]", помещаемым в TextView.

До сих пор я пытался установить свои собственные OnItemClickListener и OnItemSelectedListener, но это, похоже, только быстро переопределяет указанную выше строку вместо того, чтобы напрямую писать мою пользовательскую строку. Как я могу отключить эту строку по умолчанию?

О, и переопределение метода Objects toString() в этом случае не вариант.

Любые идеи? с уважением Данижу


person danijoo    schedule 07.10.2013    source источник
comment
Будет лучше понять вашу проблему, если вы разместите хотя бы какой-нибудь соответствующий код.   -  person GrIsHu    schedule 07.10.2013


Ответы (2)


У меня была такая же проблема, и я решил ее следующим образом:

private AutoCompleteTextView actv;
CustomAdapter adapter = new CustomAdapter(context, resource, data);
    actv.setAdapter(adapter);
    actv.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> av, View view, int index, long arg3)
        {
            CustomAdapter adapter = (CustomAdapter)av.getAdapter();
            Pair customObject = (Pair<Integer, String>) adapter.getItemAtPosition(index);
        }
    });

Вы должны создать собственный метод getItemAtPosition внутри вашего файла CustomAdapter. Таким образом, вам не нужно переопределять getItem(int position), запрошенный AutoCompleteTextView, и вместо этого вы можете использовать getItemAtPosition, чтобы вернуть желаемое CustomObject.

person r4m    schedule 06.11.2013

person    schedule
comment
Да, похоже, это правильный подход. Также возможно получить курсор из adapterView, как показано в android. codota.com/scenarios/518919d5da0ad1894c49498c/ - person drorw; 07.10.2013