上下文
我有一个多模块架构,有多个功能模块,看起来像这样:
我有多个功能模块依赖于一个
:core_library
库模块,该库模块包含所有常见的依赖项(Retrofit、Room 等),然后每个不同的应用程序流程都有不同的功能模块。最后,:app
应用程序模块将所有内容联系在一起。
如果你想在相互不了解的功能模块中的活动之间导航,我使用
AppNavigator
界面:
interface AppNavigator {
fun provideActivityFromFeatureModuleA(context: Context): Intent
}
然后在
:app
模块 Application
类中,我实现了这个接口,并且由于 :app
模块将所有内容联系在一起,它知道每个功能模块中的每个活动:
class MyApp : Application(), AppNavigator {
...
override fun provideActivityFromFeatureModuleA(context: Context): Intent {
return Intent(context, ActivityFromA::class.java)
}
...
}
这个
AppNavigator
组件存在于 :core_library
的 Dagger 模块中,它可以被注入到任何功能模块中。
我有这个
:feature_login
功能模块,用于当用户创建新帐户并必须通过入职流程时,例如邀请朋友加入应用程序,检查 POST_NOTIFICATION
权限,向其添加更多详细信息账户等
每个
:feature_modules
有一个Activity
和许多Fragments
我有一个导航图在片段之间导航。
问题
:feature_login
导航图有点像这样:
问题是我需要在 App 的不同部分重用这些 Fragments 中的许多,更具体地说,这些 Fragments
例如;当我打开应用程序并登陆主屏幕时,我检查
POST_NOTIFICATION
权限,如果没有授予这些权限,我想提示 PostNotificationFragment
进行检查并向用户显示一个 UI。如果用户想从“设置”屏幕更改它们,应提示SelectSquadronFragment
+ SelectNumberFragment
。在做某事时,我想用 InviteFriendsFragment
. 提示用户
问题是我不知道如何在不让它们浏览其余流程的情况下独立重用这些片段
到目前为止我尝试了什么
子图并不能真正解决问题。我可以使用
AppNavigator
来提供我在 :feature_login
中的托管活动或每个单独的片段,但问题仍然存在。如果用户从设置中打开SelectSquadronFragment
+ SelectNumberFragment
,我不希望用户之后必须经过FinishFragment
。
通过界面提取导航到活动。该导航图中的每个片段都通过
NavDirections
导航。当我想从MedictFragment
导航到InviteFriendsFragment
时,我使用MedicFragmentDirections
。我正在考虑让 Activity
提供这些 NavDirections
,这样我就可以使用我想要的导航路线创建自定义活动,但老实说,我更愿意选择一些不是火箭科学的东西。
如果您需要我为您提供更多信息,请告诉我。欢迎任何反馈。