Нужен подходящий шаблон Android - PullRequest
1 голос
/ 28 апреля 2011

Я работаю над приложением Android и столкнулся с проблемой рефакторинга;большинство моих действий требуют определенных способностей уведомления, то есть показа тостового сообщения.Это обрабатывается суперклассом, который расширяет Activity

Activity

-NotificationActivity

- MyActivityA

- MyActivityB

и т. Д.на.Затем я решил провести рефакторинг двух моих действий, использующих Spinner, который заполняется курсором базы данных.Теперь иерархия выглядит следующим образом:

Activity

-MyNotificationActivity

- MyActivityA

- MyActivityB

- MySpinnerActivity (устанавливает Spinner и Cursor)

--- MySpinnerActivityA

--- MySpinnerActivityB

Проблема, с которой я сейчас сталкиваюсь, заключается в следующем: я пишу новый класс Activity, который будеттакже использовать курсор базы данных, но для заполнения ListView.Я хотел бы расширить ListView для использования встроенного управления списками Android, но мне также нужен доступ к методам настройки Cursor и методам уведомлений, которые уже существуют в моей иерархии классов.

Я действительно заинтересованчтобы избежать дублирования кода.Есть предложения?

Ура, Барри

1 Ответ

1 голос
/ 29 апреля 2011

Имея дело с подобной проблемой (набор действий, которые показывают ProgressDialogs), я избегал расширения суперкласса с помощью функции ProgressDialog.

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

В вашем случае, возможно, вы могли бы написать какой-то "ToasterFunctionClass"который инкапсулирует общую функциональность и имеет ее экземпляр в каждой из соответствующих операций.

public class ListStuff extends ListActivity {

    private ToastFunctionClass toaster = new ToastFunctionClass(this); //pass yourself so that toaster has a Context in which to do UI stuff.

    onSomethingHappened() {
        toaster.showToast("Something happened");
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...