导航架构组件 - 未生成 DestinationFragmentArgs
Posted
技术标签:
【中文标题】导航架构组件 - 未生成 DestinationFragmentArgs【英文标题】:Navigation Architecture Component - DestinationFragmentArgs is not generated 【发布时间】:2019-10-15 01:45:22 【问题描述】:我在 app gradle 中有这个:
apply plugin: 'androidx.navigation.safeargs'
implementation 'android.arch.navigation:navigation-fragment-ktx:1.0.0'
implementation 'android.arch.navigation:navigation-ui-ktx:1.0.0'
这在项目 gradle 中:
classpath 'android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0'
导航图:
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/navigation_graph"
app:startDestination="@id/loginPhoneNumberFragment">
<fragment
android:id="@+id/loginPhoneNumberFragment"
android:name="...fragments.LoginPhoneNumberFragment"
android:label="@string/login_activity_title"
tools:layout="@layout/fragment_login_phone_number">
<action
android:id="@+id/action_loginPhoneNumberFragment_to_loginCodeFragment"
app:destination="@id/loginCodeFragment">
<argument
android:name="prefix"
app:argType="string" />
<argument
android:name="phone_number"
app:argType="string" />
</action>
</fragment>
<fragment
android:id="@+id/loginCodeFragment"
android:name="...LoginCodeFragment"
android:label="@string/login_activity_title"
tools:layout="@layout/fragment_login_code" />
</navigation>
登录电话号码片段:
val action = LoginPhoneNumberFragmentDirections.actionLoginPhoneNumberFragmentToLoginCodeFragment(prefix, phoneNumber)
view?.findNavController()?.navigate(action)
登录代码片段:
override fun onViewCreated(view: View, savedInstanceState: Bundle?)
super.onViewCreated(view, savedInstanceState)
val prefix = LoginCodeFragmentArgs.fromBundle(arguments).prefix //LoginCodeFragmentArgs is not recognized
在 LoginPhoneNumberFragment 中,它创建了“LoginPhoneNumberFragmentDirections”类,但在目标类 LoginCodeFragment 上,它无法识别“LoginCodeFragmentArgs”。
谁能告诉我我错过了什么? (我清理并重建,并尝试过无效缓存...)
【问题讨论】:
【参考方案1】:好的,经过大量搜索,我发现了我的错误 - 参数应该在 Destination 片段上,而不是在起始片段上:
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/navigation_graph"
app:startDestination="@id/loginPhoneNumberFragment">
<fragment
android:id="@+id/loginPhoneNumberFragment"
android:name="...fragments.LoginPhoneNumberFragment"
android:label="@string/login_activity_title"
tools:layout="@layout/fragment_login_phone_number">
<action
android:id="@+id/action_loginPhoneNumberFragment_to_loginCodeFragment"
app:destination="@id/loginCodeFragment">
</action>
</fragment>
<fragment
android:id="@+id/loginCodeFragment"
android:name="...fragments.LoginCodeFragment"
android:label="@string/login_activity_title"
tools:layout="@layout/fragment_login_code" >
<argument
android:name="prefix"
app:argType="string"
android:defaultValue="888" />
<argument
android:name="phone_number"
app:argType="string"
android:defaultValue="88888888"/>
</fragment>
</navigation>
您也可以通过导航图设计手动添加 - 按目标片段并在参数部分按“+”,它会将其添加到文本文件中。
【讨论】:
另外,它不能在“action”标签中。 谢谢!这在文档中确实不是那么清楚...... 你救了我的命 太棒了!这两行必须包含在官方文档中并修复错误示例【参考方案2】:参数应该在目标片段中,而不是在源片段中的动作中
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/navigation_graph"
app:startDestination="@id/loginPhoneNumberFragment">
<fragment
android:id="@+id/loginPhoneNumberFragment"
android:name="...fragments.LoginPhoneNumberFragment"
android:label="@string/login_activity_title"
tools:layout="@layout/fragment_login_phone_number">
<action
android:id="@+id/action_loginPhoneNumberFragment_to_loginCodeFragment"
app:destination="@id/loginCodeFragment"/>
</fragment>
<fragment
android:id="@+id/loginCodeFragment"
android:name="...LoginCodeFragment"
android:label="@string/login_activity_title"
tools:layout="@layout/fragment_login_code">
<argument
android:name="prefix"
app:argType="string" />
<argument
android:name="phone_number"
app:argType="string" />
</fragment>
</navigation>
【讨论】:
以上是关于导航架构组件 - 未生成 DestinationFragmentArgs的主要内容,如果未能解决你的问题,请参考以下文章