类型参数不在其范围内:对于 Kotlin Android 应该是 'NavArgs' 的子类型
Type argument is not within its bounds: should be subtype of 'NavArgs' for Kotlin Android
我是 运行 以下片段代码,用于使用 navArgs 在“列表片段”和“更新片段”之间传递用户 class 数据。但是我收到错误类型参数不在其范围内:应该是 '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>
原来private val args by navArgs<UpdateFragmentArgs>()
不对。您必须将该行更改为 private val args: UpdateFragmentArgs by navArgs()
。
奇怪,但解决了问题。
我是 运行 以下片段代码,用于使用 navArgs 在“列表片段”和“更新片段”之间传递用户 class 数据。但是我收到错误类型参数不在其范围内:应该是 '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>
原来private val args by navArgs<UpdateFragmentArgs>()
不对。您必须将该行更改为 private val args: UpdateFragmentArgs by navArgs()
。
奇怪,但解决了问题。