Как переопределить фильтр в Android ArrayAdapter?

У меня есть ArrayAdapter, обернутый вокруг ArrayList пользовательских объектов. Я хотел бы написать собственный фильтр для этого адаптера, чтобы при вызове getListAdapter().getFilter().filter("abc") список будет фильтроваться произвольным преобразованием "abc".

Я думал, что просто попробую переопределить ArrayAdapter.getFilter(), но для этого требуется повторная реализация закрытого ArrayAdapter.ArrayFilter, который требует доступа к кучке личных экземпляров ArrayAdapter.

Какой самый простой способ сделать это?

Ответы

Ответ 1

Сначала рассмотрим исходный код ArrayAdapter.

Вы заметите, что у него есть частное поле mFilter, которое используется только в методе getFilter(). Итак, просто растяните ArrayAdapter и переопределите getFilter(), чтобы вернуть Filter.

Лучше всего реализовать ваш Filter так же, как ArrayFilter: как частный внутренний класс, поэтому он имеет доступ к закрытым полям ArrayAdapter.

Сообщите мне, достаточно ли информации для выполнения задачи.