gpt4 book ai didi

Android 免费/付费 - 使用库的架构

转载 作者:搜寻专家 更新时间:2023-11-01 09:06:55 25 4
gpt4 key购买 nike

我需要创建应用程序的免费和付费版本,因此我正在使用一个包含常见 Activity 和资源的图书馆项目。但是我想知道您将如何组织这个:

共享(库) Activity MyActivity.java 在用户单击按钮时启动 DialogFragment。免费和付费应用程序的 DialogFragment 将有所不同。对于免费应用程序,我们将启动 FreeDialog.java,对于付费应用程序,我们将启动 PaidDialog.java。这两个对话 fragment 不会出现在库项目中,因为它们没有共享;它们将分别在免费和付费项目中。

我唯一能想到的就是将MyActivity.java 抽象化并在免费和付费项目中扩展它。这些扩展将启动它们各自的 DialogFragments。

另一种方法是在每个项目中重载 fragment 。但是,我不确定这是否可行。

最佳答案

理论上,您可以将 MyActivity 抽象化,并在付费和免费应用程序项目中对其进行子类化。但是,Activity 类与普通 Java 类略有不同,这使事情变得复杂。它们列在 AndroidManifest.xml 中,并且也不是通过简单地新建它们来创建的。它们通常是使用 Intent 创建的。所以,我认为我会避免将 Activity 设为抽象类。

我认为您真正想要的是使用类似 Factory pattern 的东西创建 DialogFragment 的实例,您的公共(public)库不知道将创建哪个 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());

最后,在公共(public)库代码中,您可以通过调用创建 fragment 的实例

DialogFragment fragment = FragmentFactory.createFragment();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.fragment_content, fragment);
ft.commit();

关于Android 免费/付费 - 使用库的架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11176113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com