从另一个模块创建并显示片段

时间:2018-05-01 05:10:00

标签: java android module compilation

My App模块包含一个名为Z的库,但在Z中我需要创建并显示在App中定义的Fragment实例,我该怎么做?

我发现了这一点,但问题是我在模块Z中没有定义BillingFragment

Class<?> class = Class.forName("example.package.BillingFragment");
Constructor<?> cons = class.getConstructor(BillingFragment.class);
BillingFragment object = (BillingFragment) cons.newInstance();

1 个答案:

答案 0 :(得分:0)

如果您已经有权访问该片段,并且想要使用公共默认值no arg constructor创建实例,则可以调用:

Constructor constructor= BillingFragment.class.getConstructor();
BillingFragment fragment = (BillingFragment)constructor.newInstance();

甚至更好地使用公共静态newInstance方法:

Method method = BillingFragment.class.getMethod("newInstance", Class<?>... parameterTypes);
BillingFragment fragment = (BillingFragment) method.invoke(null, Object... args);

PS:你应该克制使用硬编码的字符串,例如"example.package.BillingFragment""newInstance",因为如果应用获取<强>混淆即可。否则,如果确实需要,请记住保留 proguard-rules中的类和方法名称。