Пишу клиент для сайта. В нем три активити, в которых отображаются загруженные данные с сайта. Хотелось бы сделать один класс для загрузки и парсинга для всех трех активити (отличается урл, алгоритм разбора данных и View которые заполняются данными). Опять-таки алгоритмы между собой пересекаются. Как это правильно реализовать? Передавать в этот класс некий int который характеризует алгоритм парсинга? А как тогда заполнять View в разных активити? Либо же не заморачиваться и сделать отдельный класс для каждого урл?
Реализовываете Базовый класс парсера, в котором пересекающийся функционал.
Если структура парсинга не очень отличается, метод Parse оставляете в базовом классе и дергаете из него переопределенные методы наследников. Если очень, переопределяете в наследниках метод Parse и дергаете методы базового класса с базовым пересекающимся функционалом. Если я правильно вас понял.
Парсеру не обязательно что-то заполнять. Он же парсер – распарсил и отдал, а Activity пусть помещает куда надо (на сколько я понимаю, на выходе получается html или что-то другое?).
Не туда воткнул.
Ну да, в целом оно, вроде. Спасибо!
Насчет возврата данных в активити — не совсем понятно как можно реализовать. В одном активити надо заполнять сложный ListView с кастомным адаптером, в другом — ImageView, в третьем набор TextView с выставлением visibility=gone при определенных условиях.
Лучше перейти от активити к фрагментам. Загрузку и парсинг данных сделать через наследника Loader. Тогда загрузка и парсинг данных (Loader и класс для парсинга) отделяется от отображения — фрагменты (и возможно адаптеры в случае ListView).
Точно сказать трудно, но по описанию задачи, когда очень много пересекающего кода похоже, что данные на разных активити одного уровня. Рассортировав их по фрагментам будет удобно изолировать парсинг и отображение каждого набора данных, и при этом отобразить все в приятной форме с современными наворотами интерфейса — взять ActionbarSherlock, ViewPager. С фрагментами значительно проще быстро переделывать интерфейс под «хотелки» бизнеса. Да поддержка различных устройств (телефоны, планшеты) проще делается — иногда достаточно разные лейауты сгенерить в ресурсах.
Насколько я понял, среди данных есть и списки. Обратите внимание на наследование от SherlockListFragment. Достаточно сделать лейауты с нужными ID и количество кода значительно сократится — основные моменты (как раз с показом или скрытием списка) уже сделаны. Лоадеры лучше делать от AsyncTaskLoader. Хотя опять же, если бы задача подробнее была описана… Вполне вероятно, что само получение данных лучше сделать через SyncAdapter, сложить в базу, а отображать уже из базы — приложением можно будет пользоваться и из оффлайна.
Да дальше уже наверное смысла нет… Были свои некоторые соображения просто, но не был до конца уверен. Сейчас утвердился и можно заниматься реализацией. А SherlockListFragment, к сожалению, не очень подходит, так же как и нет необходимости в БД. Но в любом случае, спасибо за ценную информацию.
Ну да, в целом оно, вроде. Спасибо!
Насчет возврата данных в активити — не совсем понятно как можно реализовать. В одном активити надо заполнять сложный ListView с кастомным адаптером, в другом — ImageView, в третьем набор TextView с выставлением visibility=gone при определенных условиях.