Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带参数的多模块android架构中的导航_Android_Android Architecture Navigation_Android Navigation_Android Navigation Graph - Fatal编程技术网

带参数的多模块android架构中的导航

带参数的多模块android架构中的导航,android,android-architecture-navigation,android-navigation,android-navigation-graph,Android,Android Architecture Navigation,Android Navigation,Android Navigation Graph,由于导航文件位于应用程序模块中,功能模块将无法访问Args文件。有什么解决办法吗 示例:如果我有一个片段,它接受电子邮件和密码,就像这样 <fragment android:id="@+id/navigation_sample" android:name="SampleFragment"> <argument android:name="email"

由于导航文件位于应用程序模块中,功能模块将无法访问Args文件。有什么解决办法吗

示例:如果我有一个片段,它接受电子邮件和密码,就像这样

<fragment
        android:id="@+id/navigation_sample"
        android:name="SampleFragment">
        <argument
            android:name="email"
            app:argType="string" />
        <argument
            android:name="password"
            app:argType="string" />
    </fragment>

但我只能在应用程序模块中使用它,而不能在功能模块中使用它,这取决于您所称的“功能模块”,不过我假设它应该是android库

这是有效的设置:

  • 假设您的android库名为“mylibrary”
  • 您的“应用程序”模块自然应该具有上述依赖项
  • 您的“mylibrary”应该有
    应用插件:“androidx.navigation.safeargs.kotlin”
    和库顶级build.gradle的类路径中的相应设置
  • 让我们在库中声明导航图(例如,id为myLibraryGraph的mylibrary_graph.xml),就像在“app”模块中所做的一样——假设它以您的“SampleFragment”为起点,列出了所有这些参数
  • 假设您的“app”模块有一些导航图,我们将“mylibrary\u graph.xml”嵌套在其中(
  • 假设您的“应用程序”模块导航图中有一些片段需要跳转到android库中的“SampleFragment”。我们将这样声明它(伪代码):
  • 
    
  • 最后,您可以在HelloWorldFragment中执行此操作:
    findNavController().navigate(HelloWorldFragmentDirections.jumpToSampleFragment()oh@acme.com“,”尼姆达“)

  • 可以看出,它是有效的,但在两个位置声明参数会带来一些小麻烦。

    将导航文件放入库中会出现以下问题。您在mylibraryA中,单击要导航到libraryB的按钮。你会怎么做?因为libraryA不知道libraryB,也不知道应用程序。以完全相同的方式。由于androidlib1和androidlib2需要从一个导航到另一个,您正在添加依赖项,并且您的导航方式与从应用程序到androidlib1的导航方式完全相同。我不明白。我想我的回答回答了你最初的问题——是吗?如果是,请接受/投票等。
    findnavController.navigate(R.id.navigation_sample, SampleFragmentArgs(email, password).toBundle)
    
        <fragment
            android:id="@+id/HelloWorldFragment"
            android:name="..."
            android:label="..."
            tools:layout="...">
    
            <action
                android:id="@+id/jumpToSampleFragment"
                app:destination="@+id/myLibraryGraph">
    
              <argument
                  android:name="email"
                  app:argType="string" />
              <argument
                  android:name="password"
                  app:argType="string" />
            </action>
        </fragment>