扩展活动和活动组



我正在编写一个应用程序,其中有一组代码,我希望这些代码在我的所有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的子项

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

相关内容

  • 没有找到相关文章

最新更新