我正在编写一个应用程序,其中有一组代码,我希望这些代码在我的所有Activities和ActivityGroups中都可用。然而,为了实现这一点,我将我的活动扩展为:
//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类。我还想编写我的自定义ActivityGroup类(称为BaseActivityGroup),它实际上扩展了BaseActivity(这是一个扩展的Activity)。
有什么想法/建议吗?
首先,ActivityGroups是坏的,不应该使用。它们已被弃用,最好使用带有多个片段的单个活动。
如果必须使用activitygroup,那么您可能最擅长实现委托模式。
创建一个处理所有常见方法(如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);
}
...
}
添加一个额外的final类,称为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());
}
希望它能有所帮助!
只需将所有内容扩展到BaseActivity,包括BaseGroupActivity,因为所有内容都是android 中Activity的子项
您可以将登录名放在方法下的一个单独文件中。如果您需要文件中的活动实例,现在从BaseActivity
和BaseActivityGroup
调用相同的方法。通过构造函数传递上下文