理論的には、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;
}
}
}
次に、無料および有料のアプリプロジェクトコードで、起動時に次のような呼び出しを発行します(メイン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();