Android 从主模块启动库模块中的活动

Android 从主模块启动库模块中的活动,android,Android,我有两个不同的模块,模块A和模块B是库模块。在模块A中,有一个按钮,当用户单击该按钮时,该按钮将启动活动库模块B。如何链接按钮以启动模块B中的活动?您可以按如下方式传递程序包名称: Intent intent = new Intent(YourClassA.this, com.your.package.name.ClassB.class); startActivity(intent); 我在这里看到两种情况: 情景1: 模块A在其build.gradle文件中包含模块B。如果是这样,模块A可以

我有两个不同的模块,模块A和模块B是库模块。在模块A中,有一个按钮,当用户单击该按钮时,该按钮将启动活动库模块B。如何链接按钮以启动模块B中的活动?

您可以按如下方式传递程序包名称:

Intent intent = new Intent(YourClassA.this, com.your.package.name.ClassB.class);
startActivity(intent);

我在这里看到两种情况:

情景1: 模块A在其build.gradle文件中包含模块B。如果是这样,模块A可以直接启动活动,因为该活动对其可见。这将是(在科特林):

情景2: 模块A不包括模块B,但两者都在同一个项目中。在这种情况下,
ActivityInModuleB
类对模块A不可见,因此您无法导入它并直接使用它。在这种情况下,有几种可能的解决方案

选项1: 在AndroidManifest.xml中使用模块B的
活动inModuleB
关联到字符串。然后,您可以在模块A中创建Intent,并调用
Intent.setAction(ActionStringInManifestGoesher)
,这样您就可以间接引用这个类

我个人没有使用过这种方法,尽管我想在以前的项目中使用。只是那个项目已经在使用选项2了,需要一段时间才能切换

选项2: 在包含模块a和模块B的模块中设置LocalBroadcastReceiver。然后,每个模块都可以注册为处理广播。发送广播时,会附加一个操作(类似于选项1)。广播接收器将调用每个模块的处理程序,如果在其支持的列表中找到关联的操作,则为其提供启动相应活动的机会。在某个模块启动某个活动时,它可以返回true,表示它已处理该操作,并且您的主模块可以决定短接调用任何其他模块的处理程序,或者让所有模块都有机会


这种方法确实有效(在安装了数百万次的应用程序中使用)。但是,我认为这基本上只是重新创建选项#1,因此可能有些过分。

非常感谢您的回复……我一定会尝试一下,稍后将结果更新给您。
button.setOnClickListener {
    val intent = Intent(this, ActivityInModuleB::class.java)
    // Possibly add extras here
    startActivity(intent)
}