У меня есть список полиморфных объектов, например List<Person>
, где человек может быть сотрудником, менеджером, солдатом, роялти и т. Д. ... и я хочу отобразить список лиц в android list-view, где каждый тип лица имеет другой шаблон строки и несколько разные данные.Отображение различных типов строк в списке Android
Каков правильный способ отображения различных строк разных типов? (?)
Два плохих решений :
Помещенный абстрактную
getView
метод внутриPerson
класса, так что каждый другой человек будет создавать правильный вид с помощью полиморфизма. -> Это будет смешивать модель и вид MVC - т.е. если я захочу представить список на другом экране (например, в виде таблицы), тогда он сломается.Поместите логику модели в режим просмотра внутри адаптера (унаследовано от
ArrayAdapter<Person>
). Например, внутриgetView
Я могу проверитьgetClass()
человека и соответствующим образом заполнить правильный вид. -> Этот метод завершится длинными цепочками операторов if-else, по одному для каждого типа человека, и его необходимо будет расширить при добавлении новых типов лиц - обычно это запах плохого кода в объектно-ориентированной точке зрения. Это решение, предложенное в «How to create list with different elements and actions?»
Есть ли решение лучше, чем (2) выше?
Это один из самых неприятных вопросов во всем дизайне Android UI. Мне бы хотелось увидеть больше экспертов в области андроидов. –