共享不同活动类型之间的通用功能

时间:2010-11-25 06:20:39

标签: android inheritance android-activity

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

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的设计方式(没有多重继承),看起来我上面尝试做的事情实际上并不可行。有几种方法可以最大限度地减少代码重复,但继承在这种情况下不起作用。

1 个答案:

答案 0 :(得分:0)

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

例如:您可以在类中创建一个实例变量,如下所示:`private DbAdapter dbAdapter = new DbAdapter(this);

onCreate中,在open() onDestroy来电中添加close()来电。我认为在上面的示例中不需要getAdapter()函数。所以至少保存一些代码行。

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