Существует ли шаблон разработки для сокращения дублирования кода при разделении на подклассы Операций в Android?

У меня есть общая задача, которую я делаю с некоторыми Операциями - загрузка данных, затем отображающих его. У меня есть часть загрузки, вниз похлопывают; это, конечно, немного хитро из-за возможности пользователя, изменяющего ориентацию или отменяющего Действие, прежде чем загрузка будет завершена, но код там. Существует достаточно кода, обрабатывающего эти случаи, таким образом, что я не хочу иметь к скопировать/вставить ему к каждому Действию, которое я имею, таким образом, я думал для создания самого абстрактного Действия подкласса, таким образом, что он обрабатывает единственную фоновую загрузку, которая затем запускает метод, который заполняет страницу данными.

Это все работы. Проблема - то, что, из-за единичного наследования, я вынужден воссоздать тот же самый класс для любого другого типа Действия - например, я использую Действие, ListActivity и MapActivity. Использовать ту же технику для всех трех требует, чтобы три дублирующихся класса, кроме каждого расширил различное Действие.

Существует ли шаблон разработки, который может сократить дублирование кода? В настоящий момент я уже сохранил много дублирования, но оно причиняет боль мне для наблюдения того же самого кода в трех классах именно так, что каждый из них разделяет другой тип на подклассы Действия.

Править: Так как кажется, что я должен быть немного более конкретным...

Предположим, что я пытаюсь решить проблему загрузки истории AsyncTask во время изменений ориентации. Решение, которое я имею прямо сейчас, состоит в том, чтобы использовать обратные вызовы; существует менеджер загрузок, который я имею, который запускает эти загрузки, и затем у меня есть присоединение Действия обратный вызов к нему. Когда ориентация изменяется, Действие уничтожается и затем воссоздается; во время этого процесса я отсоединяю обратный вызов старого Действия, затем присоединяю новый обратный вызов от нового Действия впоследствии.

Изменения ориентации являются типичной проблемой, и в нескольких Операциях я запускаю Действие с представления прогресса, в то время как данные загружаются. То, что я пытаюсь решить, не должно повторно реализовывать эту обрабатывающую ориентацию логику десять раз; мое начальное решение состояло в том, чтобы разделить Действие на подклассы, но затем я получил проблему выше.

5
задан Dan Lew 6 April 2010 в 19:24
поделиться

4 ответа

Предпочитайте композицию наследованию . Что бы ни было распространено, делегируйте некоторый класс (классы), который может быть членом Activity, ListActivity и MapActivity.

3
ответ дан 15 December 2019 в 06:21
поделиться

Я не использовал MapActivity, но решил эту проблему, не используя ListActivity и предоставив функциональность самостоятельно в Activity. В ListActivity действительно не так много, если вы посмотрите: http://google.com/codesearch/p?hl=en#uX1GffpyOZk/core/java/android/app/ListActivity.java Реализуйте вы получите больше возможностей для настройки и больше возможностей для развития.

0
ответ дан 15 December 2019 в 06:21
поделиться

Есть ли способ иметь класс-помощник со статическими методами, которому можно было бы передать ваши действия и чтобы общая работа выполнялась там, а не в каждом действии?

0
ответ дан 15 December 2019 в 06:21
поделиться

Проблема в том, что вы смешиваете представление и логику своей программы. Фоновый поток, такой как AsyncTask , будет работать до тех пор, пока ваше приложение не будет удалено из системы. Вы можете загрузить все в асинхронной задаче, а затем сохранить его где-нибудь на SD-карте, чтобы получить оттуда, если он готов.

Вы можете создать подкласс класса приложения , чтобы хранить ссылку на задачу или обработчик для связи с классом из каждого действия.

Если это вообще не решение вашей проблемы, возможно, вы могли бы немного прояснить вопрос. Было бы полезно узнать, что вы делаете в методах onCreate ...

0
ответ дан 15 December 2019 в 06:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: