从理论上讲,您可以MyActivity
在付费和免费应用程序项目中进行抽象并将其子类化。但是,Activity
类与普通的 Java 类有点不同,这使这变得复杂。它们在 AndroidManifest.xml 中列出,然后也不是通过简单地更新它们来创建的。它们通常是用Intent
s 创建的。所以,我想我会远离创建Activity
一个抽象类。
我认为您真正想要的是使用类似于工厂模式的东西来创建 的实例DialogFragment
,而您的公共库不知道DialogFragment
将创建哪个实例。您可以对工厂非常感兴趣,并且可以在其他地方阅读所有相关信息,但一个简单的可能对您有用:
public class FragmentFactory {
private static String _dialogFragmentClassName;
public static void registerFragment(String className) {
// you might choose to assert if _dialogFragmentClassName != null
_dialogFragmentClassName = className;
}
public static DialogFragment createFragment() {
try {
return (DialogFragment) Class.forName(_dialogFragmentClassName).newInstance();
} catch (Exception e) {
return null;
}
}
}
然后,在您的免费和付费应用项目代码中,您将在启动时发出这样的调用(例如在 main 中Activity
):
FragmentFactory.registerFragment(com.mycompany.free.FreeDialogFragment.class.getName());
和
FragmentFactory.registerFragment(com.mycompany.paid.PaidDialogFragment.class.getName());
最后,在通用库代码中,可以通过调用来创建片段的实例
DialogFragment fragment = FragmentFactory.createFragment();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.fragment_content, fragment);
ft.commit();