yby*_*byb 2 android android-navigation android-safe-args android-navigation-graph
我使用navigation
和SafeArgs
到switch screens
和pass data
。
当在屏幕上选择数据时A
,数据在屏幕切换的同时传输。
但是,有时屏幕会在没有任何操作的情况下A
切换到屏幕B
。
null
我决定在这种情况下发送。
但我不断收到以下错误:
\nE/AndroidRuntime: FATAL EXCEPTION: main\n Process: com.example.lightweight, PID: 9555\n java.lang.RuntimeException: java.lang.reflect.InvocationTargetException\n at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)\n Caused by: java.lang.reflect.InvocationTargetException\n at java.lang.reflect.Method.invoke(Native Method)\n at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)\xc2\xa0\n Caused by: java.lang.reflect.InvocationTargetException\n at java.lang.reflect.Method.invoke(Native Method)\n at androidx.navigation.NavArgsLazy.getValue(NavArgsLazy.kt:54)\n at androidx.navigation.NavArgsLazy.getValue(NavArgsLazy.kt:35)\n at com.example.lightweight.fragment.WriteRoutineFragment.getArgs(WriteRoutineFragment.kt:20)\n at com.example.lightweight.fragment.WriteRoutineFragment.onViewCreated(WriteRoutineFragment.kt:44)\n at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:2985)\n
Run Code Online (Sandbox Code Playgroud)\n导航.xml
\n<fragment\n android:id="@+id/writeRoutine"\n android:name="com.example.lightweight.fragment.WriteRoutineFragment"\n android:label="fragment_write_routine"\n tools:layout="@layout/fragment_write_routine" >\n <action\n android:id="@+id/action_writeRoutineFragment_to_workoutListTabFragment"\n app:destination="@id/workoutListTabFragment" />\n <argument\n android:name="workout"\n app:argType="string"\n app:nullable="true" />\n</fragment>\n
Run Code Online (Sandbox Code Playgroud)\n在适配器中
\ninner class ViewHolder(itemView: View, context: Context) : RecyclerView.ViewHolder(itemView) {\n private val tv: TextView = itemView.findViewById(R.id.workout)\n\n init {\n tv.setOnClickListener { view ->\n val workout = tv.text.toString()\n val action: NavDirections = WorkoutListTabFragmentDirections.actionWorkoutListTabToWriteRoutine(workout)\n view.findNavController().navigate(action)\n }\n }\n\n fun bind(item: String) {\n tv.text = item\n }\n }\n
Run Code Online (Sandbox Code Playgroud)\n什么原因?
\n您应该添加解决方法参数的defaultValue。这里因为你已经设置了app:nullable="true"
,所以你应该设置android:defaultValue="@null"
。
修改您创建解决方法参数的方式,如下所示:
<argument
android:name="workout"
app:argType="string"
android:defaultValue="@null"
app:nullable="true" />
Run Code Online (Sandbox Code Playgroud)
详细信息:支持的参数类型 - 导航
归档时间: |
|
查看次数: |
2223 次 |
最近记录: |