使用循环片段依赖关系模块化单活动Android应用程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用循环片段依赖关系模块化单活动Android应用程序相关的知识,希望对你有一定的参考价值。

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

  • ProductFragment
  • 登录片段
  • CartFragment
  • ProfileFragment
  • SearchFragment

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

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

Fragment Dependencies

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

每次我们尝试从app模块中选择我们的第一个模块时,我们最终会遇到很多依赖项,我们也必须转移到新模块。

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

答案

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

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

在片段中,我们将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提醒我发布:)

以上是关于使用循环片段依赖关系模块化单活动Android应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Android:当用户在导航组件、单活动应用程序中回击片段 B 时更新片段 A

Android Dagger片段可以访问AppModule和ActivityModule依赖关系,但不能访问FragmentModule依赖关系

如何将字符串数据从活动发送到片段?

Android开发——UI_片段

在 Android 应用程序中看不到导入的依赖模块类

商店之间的循环模块依赖关系