gpt4 book ai didi

android - 导航组件重复 NavArgs 的问题

转载 作者:行者123 更新时间:2023-12-03 23:50:20 25 4
gpt4 key购买 nike

我有一个 fragment :

class SomeFragment {
private val args by navArgs<SomeFragmentArgs>()
}

此 fragment 用于两个导航图中:

first_nav.xml
....
<fragment
android:id="@+id/initialFragment"
android:name="com.example.InitialFragment"
android:label="Initial Fragment">
<action
android:id="@+id/action_to_some_fragment"
app:destination="@id/someFragment" />
</fragment>
<fragment
android:id="@+id/someFragment"
android:name="com.example.SomeFragment"
android:label="Some Label">
<argument
android:name="someType"
app:argType="com.example.someType"/>
</fragment>
....

second_nav.xml
....
<fragment
android:id="@+id/initialFragment2"
android:name="com.example.InitialFragment2"
android:label="Initial Fragment">
<action
android:id="@+id/action_to_some_fragment"
app:destination="@id/someFragment" />
</fragment>
<fragment
android:id="@+id/someFragment"
android:name="com.example.SomeFragment"
android:label="Some Label">
<argument
android:name="someType"
app:argType="com.example.someType"/>
</fragment>
....

但是当我为发布 R8 构建项目时会抛出:

R8:程序类型已经存在:com.example.SomeFragmentArgs$Companion

谁可以帮我这个事?

最佳答案

我也面临这个问题。我们正在使用多个模块化开发,方向类是在不同的模块中生成的。这样到处都有几个 FragmentDirections 并导致 R8 程序类型已经存在,因为它们都有伴生对象。

有两种解决方案/解决方法。

  • 把这个 fragment 隔离成一个独立的navigation.xml

  • 在您的情况下,您可以编写 some_fragment_nav.xml
    <?xml version="1.0" encoding="utf-8"?>
    <navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:startDestination="@id/someFragment"
    android:id="@+id/some_fragment_nav">

    <fragment
    android:id="@+id/someFragment"
    android:name="com.example.SomeFragment"
    android:label="lable">

    <action
    android:id="@+id/what_ever_action_you_want"
    app:destination="@id/share_this_id_to_ids" />


    <argument
    android:name="someType"
    app:argType="com.example.someType"/>

    </fragment>

    </navigation>

    并使用
    <include app:graph="@navigation/some_fragment_nav"/>

    在您的两个导航图中。那可行。如果您正在使用多模块开发。您需要通过将您的 ID 写入 ids.xml 来共享操作 ID。
  • 将 SomeFragment 复制并粘贴到不同的命名中,例如 SomeFragment1.kt SomeFragment2.kt。也不会出现任何 R8 程序类型。此外,您可以将 SomeFragment 作为开放类,而 SomeFragment1 可以使用空实现扩展 SomeFragment。

  • 我的个人前景.. 2 比 1 好,因为它们对我来说都是解决方法。直到 jetbrains 改变生成的 FragmentDirection 类的规则。

    关于android - 导航组件重复 NavArgs 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58988557/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com