所有活动的BaseActivity都可能吗?

时间:2013-11-18 15:35:14

标签: java android android-activity

我希望在各种活动中分享方法和属性。 E.g。

public class BaseActivity extends Activity

将成为另一项活动的父级

public class MainActivity extends BaseActivity

但是,如果儿童活动是例如ListActivity这是不可能的,对吧?我也需要ListActivity的基类吗?这将是冗余代码。

我可以将ListActivity转换为Activity,但这需要更多代码。

有什么建议吗?

5 个答案:

答案 0 :(得分:5)

是的,你是对的。由于java不支持多重继承,因此一个类只能有一个基类。

但您可以通过委派而不是继承来工作:将您的方法放入一个单独的类(不继承Activity)并在您的活动中使用它的实例。然后,您可以将冗余代码(创建和保存实例)减少到最小。

另见:

http://sourcemaking.com/refactoring/replace-inheritance-with-delegation

How do I implement multiple inheritence in Java

答案 1 :(得分:4)

对于ListActivity案例,我会创建一个BaseListActivity,其范围为BaseActivityBaseListActivity将包含getListView(),如果您真的需要它,则会返回ListView,受保护的方法setAdapter()会收到Adapter / {{1 }}。您还可以创建一些受保护的方法,以便显示空视图,启用此行为并返回空视图和ListView的ID。默认情况下,这些应指向ListAdapter / android.R.id.list。但是你可以在你的孩子活动中覆盖它。
最后,这是一个OOP的问题,而不是特定的Android。如果您检查ListActivity的实施情况,您会发现实施自己的android.R.id.empty是多么简单。最后,拥有一致且强大的类层次结构更为重要。

答案 2 :(得分:1)

我正在以这种方式使用Activities,我很高兴我正在这样做。当然你必须做一些改变(比如你在问题中提到的ListActivity),但是在我看来它有更多优点,然后是不利的。

在我的应用中,我不必担心每次创建新Activity时都会发送Google Analytics数据,而且我也不必担心我需要设置BroadcastReceiver每个班级,我只是制作了我的BaseActivity摘要,并且每当我BaseActivity获得广播时,我都会调用一个抽象函数。

答案 3 :(得分:0)

如果你想分享一些方法,那就是实现接口的最佳方法,或者为baseactivity制作一个抽象类。

答案 4 :(得分:0)

正如其他人所指出的那样,你需要使用组合,因为在Java中不可能有多重继承。这个answer相关问题解释了如何在Android活动中执行此操作。