扩展Activity和ActivityGroup

时间:2012-02-23 12:06:51

标签: android inheritance android-activity extends activitygroup

我正在编写一个应用程序,其中我有一组代码,我希望在我的所有活动和ActivityGroup中都可用。但是,为实现这一目标,我将我的活动扩展为:

//custom Activity
public abstract class BaseActivity extends Activity
//custom ActivityGroup
public abstract class BaseActivityGroup extends ActivityGroup

//implemented activities in my app
public class PickUser extends BaseActivity
//and
public class Home extends BaseActivityGroup

现在的问题是,无论我在BaseActivity中编写的自定义代码,我都必须在BaseActivityGroup中编写相同的代码(如在当前实现中)。这很容易出现代码同步问题,我认为这不是一个好技术。

那么,我如何以这样的方式进行扩展:我只在BaseActivity编写自定义代码,BaseActivityGroup扩展ActivityGroup - 这是从BaseActivity构思的类?

如果我观察到android如何做到这一点,那么android中的 ActivityGroup 扩展了 Activity 类。我还想编写实际扩展 BaseActivity 的自定义 ActivityGroup 类(称为 BaseActivityGroup )(这是一个扩展的 Activity < / em>的)。

有任何想法/建议吗?

4 个答案:

答案 0 :(得分:0)

添加一个名为Base的额外最终类。 这个只包含其他Base类调用的方法,例如:

public static boolean createOptionsMenu(final Menu menu,
        final MenuInflater inflater) {
    inflater.inflate(R.menu.main_menu, menu);
    return true;
}

然后,在BaseActivity和BaseActivityGroup类中,您将调用:

@Override
public final boolean onCreateOptionsMenu(final Menu menu) {
    return Base.createOptionsMenu(menu, getMenuInflater());
}

希望它有所帮助!

答案 1 :(得分:0)

只需将所有内容扩展到BaseActivity,包括BaseGroupActivity,因为所有内容都是Android中的Activity的子项

答案 2 :(得分:0)

首先,ActivityGroups很糟糕,不应该使用。它们已被弃用,并且最好使用具有多个片段的单个活动。

如果您必须使用活动组,则最好通过实施委托模式。

创建一个处理所有常用方法的委托,例如onCreate,onResume,并在基础中使用它。在此示例中,我保存对委托中活动的引用。这种循环引用可能不是美妙的。另一种方法是将活动传递给委托中的方法。

public class ActivityDelegate() {
    private Activity mActivity;

    public ActivityDelegate(final Activity activity) {
        mActivity = activity;
    }
    public void onCreate(final Bundle savedInstanceState) {
        // Do stuff.
    }
}


public abstract class BaseActivity extends Activity {
    private ActivityDelegate mDelegate = new ActivityDelegate(this);

    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mDelegate.onCreate(savedInstanceState);
    }
    ...
}

public abstract class BaseActivityGroup extends ActivityGroup {
    private ActivityDelegate mDelegate = new ActivityDelegate(this);

    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mDelegate.onCreate(savedInstanceState);
    }
    ...
}

答案 3 :(得分:0)

您可以将登录信息放在方法下的单独文件中。现在,如果您需要文件中的活动实例,请从BaseActivityBaseActivityGroup调用相同的方法。通过构造函数传递上下文