我正在编写一个应用程序,其中我有一组代码,我希望在我的所有活动和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>的)。
有任何想法/建议吗?
答案 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)
您可以将登录信息放在方法下的单独文件中。现在,如果您需要文件中的活动实例,请从BaseActivity
和BaseActivityGroup
调用相同的方法。通过构造函数传递上下文