我可以创建一个可以作为每种活动类型的父类的类吗?

时间:2010-10-07 18:38:02

标签: java android inheritance

我希望有一个类,我的所有Activity类都可以扩展。我的应用中有ListActivitiesActivitiesMapActivitiesTabActivities等。

我的应用程序中有很多这些不同的活动,~12项活动。我希望他们每个人都拥有父类中的方法。

现在,我创建了4个父活动类,这些活动类根据其类型(ListActivityActivityMapActivityTabActivity)<从某个活动进行了扩展/ p>

我正在创建大量冗余代码 - 4个父代活动中的每个代码都有几乎完全相同的代码,但它所扩展的类活动除外。

这是一个可以澄清我的问题的例子:

  • 我有一个ActivityMenuScreen扩展了BaseListActivity
  • BaseListActivity扩展ListActivity
  • BaseListActivity包含我希望我的所有活动都可以访问的方法和字段

  • 我有另一个ActivityHomeScreen延伸BaseActivity

  • BaseActivity扩展Activity
  • BaseActivity包含与我的其他Base[<type>]Activity类相同的方法和字段(例如BaseListActivity

这些方法/字段被复制粘贴到我的所有Base[<type>]Activity,对我来说似乎非常多余。

我可以创建一个主活动类,所有类型的Activity类都可以用作其父类吗?如果没有,我是否坚持使用复制并粘贴此代码并感觉粗暴/肮脏?

2 个答案:

答案 0 :(得分:5)

  

我可以创建一个主活动类,所有类型的Activity类都可以用作其父类吗?

不,抱歉。

  

如果没有,我是否坚持使用副本并粘贴此代码并对此感到粗暴/肮脏?

首先,您不需要ListActivityTabActivity。对于ListActivity,您不需要ListView;对于TabActivity,您不需要TabHost。这将事情归结为两个基类:ActivityMapActivity。不幸的是,您需要将MapActivity扩展为使用MapView

为此,您可以使用合成来最小化冗余。而不是您在活动上实现的“我希望我的所有活动都可以访问的方法和字段”,而是在其他对象上实现它们,并让BaseActivityBaseMapActivity保持在该实例上宾语。您仍然需要一些重复的代码(例如,对于onStop()这样的生命周期方法),但更多的东西可以放在一个类中。

答案 1 :(得分:1)

是的,您可以创建一个包含所有冗余代码的主类。虽然问题是,你使用的是ListActivities,TabActivites等,它们只是便利类(它们扩展了Activity类并为你做了一些家务,但没有那么多)。

我只是抛弃它们,创建一个名为BaseActivity的类来扩展Activity类,并拥有所有冗余的代码部分。然后,您的所有活动都应扩展BaseActivity。