片段具有空参数safeargs

时间:2019-11-27 17:46:39

标签: android-navigation android-architecture-navigation

如何使用导航体系结构组件safeargs将参数传递给对话框片段? 下面是我目前的实现方式

开始片段

val navController = findNavController()
val action =
            QuestionListFragmentDirections.actionQuestionListFragmentToCustomDialogFragment(args.templateFlag)
        navController.navigate(
            action
        )

目标片段

   args.templateFlage //supposed to return a boolean value 
   //but throws java.lang.IllegalStateException: Fragment QuestionTypeDialogFragment{e8be5e1} 
   (47b305ea-35b2-49e0-b378-d31a08ba9a41) QuestionTypeDialogFragment} has null arguments

3 个答案:

答案 0 :(得分:2)

也许你在片段得到它之前使用了args。例如,我在代码中更改了它:

 private val args by navArgs<RadioDetailFragmentArgs>()
 private val stations = args.stations.toList()

private val args by navArgs<RadioDetailFragmentArgs>()
private val stations by lazy {
    args.stations.toList()
}

它有效

答案 1 :(得分:0)

您必须在XML参数导航声明中添加android:defaultValue="@null",例如:

           <argument
            android:name="ArgName"
            android:defaultValue="@null"
            app:argType="boolean"
            app:nullable="true" />

答案 2 :(得分:0)

您可以通过捆绑发送参数,而不是发送指导。

val bundle = Bundle()
bundle.putBoolean("templateFlag", args.templateFlag)

findNavController().navigate(
    R.id.action_QuestionListFragment_to_CustomDialogFragment,
    bundle
)