因为项目用到了模块化,library中调用app类中的方法只能通过反射
这里是app中的类,startAction方法需要接收从library传过来的值
public class ManuscriptDetailActivity extends BaseActivity {
//将数据传到startAction中
public static void startAction(Context mContext, String postId, String position) {
}
}
第一种方法
在library中不可以直接调用 ManuscriptDetailActivity.startAction()方法,因为调用不到。所以只能通过反射。
try {
ClassLoader loader = DepartmentReportDetailActivity.class.getClassLoader();//得到当前类的classLoader
Class<?> clz;
clz = loader.loadClass("com.founder.mobileeditor.mobileeditor3.ui.main.modules.activity.ManuscriptDetailActivity"); //加载类
Method m = clz.getDeclaredMethod("startAction", Context.class,
String.class, String.class); //获取方法
m.invoke(clz, DepartmentReportDetailActivity.this,docId , ""); //反射调用,static方法调用时,不必得到对象示例
} catch (Exception e) {
e.printStackTrace();
}
第二种方法
try {
Class<?> name = Class.forName("com.founder.mobileeditor.mobileeditor3.ui.main.modules.activity.ManuscriptDetailActivity");
Method method = name.getDeclaredMethod("startAction", Context.class, String.class, String.class, String.class, String.class, String.class);
method.invoke(name,DepartmentReportDetailActivity.this, String.valueOf(docId), "", String.valueOf(docLibId), "", "");
} catch (Exception e) {
e.printStackTrace();
}