Могу ли я создать отдельный класс, который может быть родительским для каждого типа деятельности? - PullRequest
1 голос
/ 07 октября 2010

Я хочу иметь один класс, который расширяет все мои Activity классы.У меня есть ListActivities, Activities, MapActivities, TabActivities и т. Д. В моем приложении.

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

Прямо сейчас я создал 4 родительских класса активности, которые расширяются от определенной деятельности в зависимости от их типа (ListActivity, Activity, MapActivity, TabActivity)

Я создаю много избыточного кода - каждое из 4 родительских действий имеет почти идентичный код, за исключением того, что расширяет классовое действие.

Вот пример, который может прояснить, в чем заключается моя проблема:

  • У меня есть Activity: MenuScreen, который расширяется BaseListActivity
  • BaseListActivity расширяется ListActivity
  • BaseListActivity содержит методы и поля, к которым я хочу, чтобы все мои действия имели доступ к

  • У меня есть еще Activity: HomeScreen, который расширяетсяBaseActivity

  • BaseActivity extends Activity
  • BaseActivity содержит те же методы и поля, что и в других моих Base[<type>]Activity классах (например, BaseListActivity)

эти методы / поля вставляются в копию для всех моих Base[<type>]Activity и кажутся мне излишне избыточными.

Могу ли я создать мастер-класс активности, который все типы классов активности могут использовать в качестве родительского?если нет, я застрял с копированием и вставкой этого кода и чувствую себя грубым / грязным по этому поводу?

Ответы [ 2 ]

5 голосов
/ 07 октября 2010

Могу ли я создать мастер-класс активности, который все типы классов активности могут использовать в качестве его родителя?

Нет, извините.

если нет, я застрял с копированием и вставкой этого кода и чувствую себя грубым / грязным по этому поводу?

Во-первых, вам не нужно ListActivity или TabActivity. Вам не нужно ListActivity для ListView; Вам не нужно TabActivity для TabHost. Это сбивает с толку два базовых класса: Activity и MapActivity. К сожалению, вам do необходимо расширить MapActivity, чтобы использовать MapView.

Для этого вы можете использовать композицию, чтобы минимизировать избыточность. Вместо того, чтобы ваши «методы и поля, к которым я хочу, чтобы все мои действия имели доступ», были реализованы в действии, реализуйте их на каком-то другом объекте, а BaseActivity и BaseMapActivity удерживайте экземпляр этого объекта. Вам все еще понадобится некоторое количество дублирующегося кода (например, для методов жизненного цикла, таких как onStop()), но в одном классе может быть размещено больше материала.

1 голос
/ 07 октября 2010

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

Я бы просто отказался от них, создал бы класс с именем BaseActivity, который расширяет класс Activity и имеет все избыточные части кода.Затем все ваши действия должны расширять BaseActivity.

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