我们有一个带底栏导航的应用。导航位于MainActivity
。我们使用片段管理应用程序的不同屏幕之间的导航。例如。有:
在我们的MainActivity
中,我们有一个方法pushFragment(Fragment fragment)
,负责用新片段替换当前片段。在我们不同的片段之间存在很多依赖关系。 E.g:
ProductFragment
CartFragment
LoginFragment
)LoginFragment
ProfileFragment
ProfileFragment
中的“历史订单”,您还可以通过ProductFragment
显示产品详情。我们现在想要模块化我们的Android应用程序,以利用Instant Apps,更快的构建时间和所有其他优势。理想情况下,我们希望为每个片段都有一个模块。然而,由于我刚刚描述的依赖性,我们无法创建线性依赖性层次结构,也不知道如何构建模块。
每当我们尝试从app模块中提取第一个模块时,我们最终会遇到很多依赖项,我们也必须转移到新模块。
我们目前看到的唯一解决方案是改变我们在片段之间导航的方式,但我们无法想办法如何做到这一点。
答案 0 :(得分:0)
我们找到了解决方案的开始:
我们有一个接口NavigationHelper
,该接口声明了导航到其他片段(startProfileFragment
,startLoginFragment
,startProductFragment
等)的方法。此接口在我们的libBase中。它是在活动中实现的,该活动位于应用程序模块中。
在片段中,我们将context
中的onAttach
强制转换为NavigationHelper
(还要检查上下文是否是NavigationHelper,否则抛出异常):
private NavigationHelper mNavigationHelper;
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof NavigationHelper){
mNavigationHelper = (NavigationHelper) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement NavigationHelper");
}
}
然后,您只需调用mNavigationHelper.startProfileFragment()
即可切换片段。
感谢@Andrey提醒我将其发布:)