首页 > 解决方案 > 类型参数不在其范围内:应该是 Kotlin Android 的“NavArgs”的子类型

问题描述

我正在运行以下片段代码,用于使用 navArgs 在“列表片段”和“更新片段”之间传递用户类数据。但我得到错误类型参数不在其范围内:应该是“NavArgs”的子类型。

下面是我正在接收数据的更新片段代码,之后是 XML 中的片段导航图。我正在关注这方面的教程,所以我的术语可能有点不准确,抱歉。我还应该说我正在使用房间数据库。谢谢你的帮助。

package com.example.testingroomdatabase.realFragments.update

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.fragment.navArgs
import com.example.testingroomdatabase.R
import kotlinx.android.synthetic.main.fragment_update_fragment.view.*

class UpdateFragment : Fragment() {
    private val args by navArgs<UpdateFragmentArgs>()
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        val view =  inflater.inflate(R.layout.fragment_update_fragment, container, false)
        view.updateFirstName_et.setText(args.currentUser.firstName)
        view.updateLastName_et.setText(args.currentUser.lastName)
        view.updateAge_et.setText(args.currentUser.age.toString())

        return view

    }
}

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/my_nav"
    app:startDestination="@id/listFragment">

    <fragment
        android:id="@+id/listFragment"
        android:name="com.example.testingroomdatabase.realFragments.list.listFragment"
        android:label="List"
        tools:layout="@layout/fragment_list" >
        <action
            android:id="@+id/action_listFragment_to_addFragment"
            app:destination="@id/addFragment" />
        <action
            android:id="@+id/action_listFragment_to_updateFragment"
            app:destination="@id/updateFragment" />
    </fragment>
    <fragment
        android:id="@+id/addFragment"
        android:name="com.example.testingroomdatabase.realFragments.add.addFragment"
        android:label="Add"
        tools:layout="@layout/fragment_add" >
        <action
            android:id="@+id/action_addFragment_to_listFragment"
            app:destination="@id/listFragment" />
    </fragment>
    <fragment
        android:id="@+id/updateFragment"
        android:name="com.example.testingroomdatabase.realFragments.update.UpdateFragment"
        android:label="Update"
        tools:layout="@layout/fragment_update_fragment" >
        <action
            android:id="@+id/action_updateFragment_to_listFragment"
            app:destination="@id/listFragment" />
        <argument
            android:name="currentUser"
            app:argType="com.example.testingroomdatabase.model.User" />
    </fragment>
</navigation>

标签: androidkotlinandroid-room

解决方案


事实证明这private val args by navArgs<UpdateFragmentArgs>()是不正确的。您必须将该行更改为private val args: UpdateFragmentArgs by navArgs(). 奇怪,但解决了这个问题。


推荐阅读