Найти тему

Адаптеры getView

Все становится немного сложнее, когда вы понимаете, что во всем, что происходило до этого момента в этой главе, мы никогда не изменяли сам ListView. Вся наша работа была связана с адаптерами, переопределением getView() и раздуванием наших собственных строк и тому подобным.



Поэтому, если мы хотим, чтобы RateListView принимал любой обычный ListAdapter и "просто работал", размещая флажки в строках по мере необходимости, нам придется проделать некоторую причудливую работу. В частности, нам нужно будет обернуть "сырой" ListAdapter в другой ListAdapter, который знает, как помещать флажки в строки и отслеживать состояние этих флажков.

Сначала нам нужно создать схему, в которой один ListAdapter будет дополнять другой. Вот код AdapterWrapper, который принимает ListAdapter и делегирует все методы интерфейса делегату (из проекта-образца FancyLists/RateListView).

Затем мы можем подклассифицировать AdapterWrapper для создания RateableWrapper, переопределив стандартную getView(), но в остальном позволив делегированному ListAdapter выполнять "настоящую работу":"