【问题标题】:Sharing common functionality between different activity types在不同活动类型之间共享通用功能
【发布时间】:2010-11-25 06:20:38
【问题描述】:

我想提供不同活动类型之间的通用功能,例如打开和关闭数据库连接。考虑以下类:

public class DataActivity extends Activity {

    private DbAdapter mDbAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        //open database
        mDbAdapter = new DbAdapter(this);
        mDbAdapter.open();

}

    @Override
    protected void onDestroy() {

        super.onDestroy();
        //close database
        mDbAdapter.close();

    }

    public DbAdapter getDbAdapter() {
        return mDbAdapter;
    }

}

然后我可以简单地扩展DataActivity 并在整个班级中访问我的数据。但是,如果我想为ListActivityExpandableListActivity 执行此操作怎么办?我需要复制DataActivity 并让它扩展所需的类。

对于我想要添加的每个活动类型的多个具有重复实现代码的类,这似乎真的很混乱。

编辑 由于Java的设计方式(没有多重继承),看起来我在上面尝试做的事情实际上是不可能的。有几种方法可以最大限度地减少代码重复,但在这种情况下继承不起作用。

【问题讨论】:

    标签: android inheritance android-activity


    【解决方案1】:

    通过从所有这些类继承(我不推荐)并扩展它们(创建 BaseActivity、BaseMapActivity、BaseXXXActivity..)或使用聚合,这更有意义:Inheritance vs. Aggregation。 Android 基于 Java,因此适用于 Java 的所有规则和 OOP 实践。

    例如:您可以像这样在类中创建一个实例变量:`private DbAdapter dbAdapter = new DbAdapter(this);

    onCreate 中,添加open() 调用,在onDestroy 中添加close() 调用。我认为在上面的示例中不需要 getAdapter() 函数。所以至少要节省几行代码。

    要减少代码,请尝试添加一个包含 instance(Context ctx) 方法的 DataService 类 - 如果需要,您可以在其中创建 DbHelper

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多