Android: AutoCompleteTextView с пользовательским адаптером
Я написал собственный класс адаптера, расширяющий BaseAdapter, реализующий Filterable для использования с AutoCompleteTextView. Фильтрация и выбор работает нормально.
Единственная проблема заключается в том, что если щелкнуть элемент из списка, AutoCompleteTextView, кажется, автоматически вызывает адаптеры getItem(int position)
метод и устанавливает его текст getItem(position).toString()
, Я не хочу, чтобы это поведение, поскольку я использую пользовательские объекты в базовом адаптере, и это приводит к таким строкам, как "ClassName [id=xx, variable1=var1]"
положить в TextView.
До сих пор я пытался установить свои собственные OnItemClickListener и OnItemSelectedListener, но, похоже, это только быстро переопределяет вышеуказанную строку набора вместо прямой записи моей пользовательской строки. Как я могу отключить эту строку по умолчанию?
Да, и переопределение метода Objects toString() не вариант в этом случае.
Есть идеи? С уважением, Данижу
2 ответа
// try this
autoCompleteText.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View arg1, int position, long arg3) {
String str = (String) adapterView.getItemAtPosition(position);
autoCompleteText.setText(str);
}
});
У меня была та же проблема, и я решил ее следующим образом:
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
,