Где этот код должен жить - в моей деятельности или в моем адаптере? - PullRequest
2 голосов
/ 22 октября 2011

Я ищу руководство по модуляции моего кода. У меня есть активность и listAdapter, и они становятся довольно сложными. Я не уверен, какой код должен жить, где и сколько знаний должен иметь каждый из этих двух классов. Как вы решаете, помещать ли код в действие или его адаптер? А какие шаблоны вы используете, чтобы поддерживать эти классы как можно более скудными?

Ответы [ 2 ]

2 голосов
/ 22 октября 2011

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

Но, в общем,просто подумайте, что должен делать каждый класс.«Activity» (на мой взгляд) является основным контроллером, он «знает всех» и соединяет другие компоненты вместе (ListView с адаптером списка).Назначение адаптера списка - просто отобразить данные в представления.Если они становятся больше, извлекайте новые (служебные) классы.

Например, предположим, что большая часть кода в ListAdapter форматирует метки времени (например, принимает метку времени как длинное значение и на основе текущего времени создает строку типа «2 часа назад»).Затем имеет смысл создать новый служебный класс TimeFormat (с конструктором, который принимает контекст, он понадобится вам позже для извлечения строковых ресурсов).Затем ListAdapter создаст экземпляр этого класса.

Другим примером будет сохранение данных.В этом случае вы можете создать класс с именем «Модель» или «Документ» (снова с конструктором, принимающим экземпляр «Контекст»).Например, он будет ответственен за загрузку данных с помощью парсин-файлов XML и сохранение данных путем генерации файлов XML.В этом случае этот класс будет создан действием.

Также обратите внимание, что ListAdapter должен действительно делать то, что должен: создавать / настраивать представления на основе данных.Он никогда не должен зависеть от других представлений (в других представлениях он должен работать с любым ListView в любом файле макета).Поэтому, если у вас есть вызов «findViewById», который обращается к представлению вне ListView (или самого ListView), тогда этот код следует переместить в действие.

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

1 голос
/ 22 октября 2011

В соответствии с документацией к адаптеру в Android

Объект адаптера действует как мост между AdapterView и базовыми данными для этого представления.Адаптер обеспечивает доступ к элементам данных.Адаптер также отвечает за создание представления для каждого элемента в наборе данных.

Так что, если ваш код связан с получением данных для отображения или созданием представлений, то он идет в адаптер,Все остальное идет в деятельности или где-то еще.Если вы тратите много кода на извлечение информации, которую хотите отобразить, рассмотрите возможность использования некоторого класса AsyncTaskLoader .Обратите внимание, что к классам загрузчика можно получить доступ с уровня API ниже 3.0, используя пакет совместимости Android .

...