Эта техника - предоставление альтернативного макета для использования в строках - очень хорошо справляется с простыми случаями. Однако его недостаточно, если у вас есть более сложные сценарии для строк, например, такие как следующие:
- Не все строки используют одинаковый макет (например, некоторые имеют одну строку текста, другие - две).
- Вам необходимо настроить виджеты в рядах (например, разные значки для разных случаев).
В этих случаях лучшим вариантом будет создание собственного подкласса нужного вам Adapter, переопределение getView() и построение строк самостоятельно. Метод getView() отвечает за возврат View, представляющего строку для заданной позиции в данных адаптера.
Например, давайте переделаем предыдущий код для использования getView(), чтобы иметь разные иконки для разных строк - в данном случае одну иконку для коротких слов и одну для длинных слов (из проекта примера FancyLists/Dynamic на http://apress.com/):
Теория заключается в том, что мы переопределяем getView() и возвращаем строки в зависимости от того, какой объект отображается, где объект обозначается индексом позиции в адаптере. Однако, если вы посмотрите на реализацию, показанную в приведенном здесь коде, вы увидите ссылку на класс LayoutInflater - и эта концепция требует небольшого объяснения.