1

我们有一个底部栏导航的应用程序。导航在我们的MainActivity. 我们使用片段管理应用程序不同屏幕之间的导航。例如有:

  • 产品片段
  • 登录片段
  • 购物车片段
  • 配置文件片段
  • 搜索片段

在我们MainActivity的方法pushFragment(Fragment fragment)中,我们有一个负责用新片段替换当前片段的方法。在我们不同的片段之间有很多依赖关系。例如:

  • 用户可以ProductFragmentCartFragment
  • 为了查看某些产品数据,用户必须登录 ( LoginFragment)
  • LoginFragment也用于ProfileFragment
  • 您还可以通过“历史订单”中的“历史订单”ProfileFragment显示产品详细信息ProductFragment

片段依赖

我们现在想要模块化我们的 Android 应用程序,以利用即时应用程序、更快的构建时间以及所有其他优势。理想情况下,我们希望每个片段都有一个模块。然而,由于像我刚才描述的那样的依赖关系,我们无法创建线性依赖层次结构,也不知道如何构建我们的模块。

每次我们尝试从应用程序模块中选择我们的第一个模块时,我们最终会产生很多依赖关系,我们还必须移动到新模块。

我们目前看到的唯一解决方案是改变我们在片段之间导航的方式,但我们想不出如何做到这一点。

4

1 回答 1

0

我们找到了一个解决方案的开始:

我们有一个接口NavigationHelper,它声明了导航到其他片段(startProfileFragment, startLoginFragment, startProductFragment, ...)的方法。这个接口在我们的 libBase 中。它是在 Activity 中实现的,它位于 app 模块中。

在 Fragment 中,我们将contextinonAttach转换为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 提醒我发布:)

于 2019-01-09T13:51:21.400 回答