Android 片段安全参数
Android fragment safe args
有人可以向我解释一下它是如何工作的吗?
从(MainFragment)点击 FAB 以通过导航组件创建新片段(HabitEditorScreenFragment)。将其应用于 Parcelable 参数。在该片段中,我将使用新参数类型 Int 进入新片段(EditColorFragment)。在该片段中:
将新的 int 保存在可共享的 viewModel
我要返回 findNavController().navigateUp()
而现在是奇怪的事情。如果我在 editfields 中输入一些值,这些值将在 safeArgs 值中。但是我没有把它保存在任何地方!
更新:
当我在编辑字段中键入内容时,它恰好发生了。
但是:
private fun setDoAfterTextChanged() = with(binding) {
fhesHabitNameInput.doAfterTextChanged {
viewModel.editorHabit.name = fhesHabitNameInput.text.toString()
viewModel.canWeSave() //just cheking errors
checkName() // checking specific field
}
fhesHabitDescriptionInput.doAfterTextChanged {
viewModel.editorHabit.description = fhesHabitDescriptionInput.text.toString()
viewModel.canWeSave()
checkDescription()
}
fhesHabitFrequencyInput.doAfterTextChanged {
viewModel.editorHabit.frequency = fhesHabitFrequencyInput.text.toString()
viewModel.canWeSave()
checkFrequency()
}
}
好的,我弄清楚发生了什么。把我当哑巴:D
viewModel.editorHabit = args.habitCharacteristics
这正在 viewModel.EditorHabit
上更改 link,而不是从 args 复制信息。真的很蠢 :D 对不起。
有人可以向我解释一下它是如何工作的吗?
从(MainFragment)点击 FAB 以通过导航组件创建新片段(HabitEditorScreenFragment)。将其应用于 Parcelable 参数。在该片段中,我将使用新参数类型 Int 进入新片段(EditColorFragment)。在该片段中:
将新的 int 保存在可共享的 viewModel
我要返回 findNavController().navigateUp()
而现在是奇怪的事情。如果我在 editfields 中输入一些值,这些值将在 safeArgs 值中。但是我没有把它保存在任何地方!
更新:
当我在编辑字段中键入内容时,它恰好发生了。
但是:
private fun setDoAfterTextChanged() = with(binding) {
fhesHabitNameInput.doAfterTextChanged {
viewModel.editorHabit.name = fhesHabitNameInput.text.toString()
viewModel.canWeSave() //just cheking errors
checkName() // checking specific field
}
fhesHabitDescriptionInput.doAfterTextChanged {
viewModel.editorHabit.description = fhesHabitDescriptionInput.text.toString()
viewModel.canWeSave()
checkDescription()
}
fhesHabitFrequencyInput.doAfterTextChanged {
viewModel.editorHabit.frequency = fhesHabitFrequencyInput.text.toString()
viewModel.canWeSave()
checkFrequency()
}
}
好的,我弄清楚发生了什么。把我当哑巴:D
viewModel.editorHabit = args.habitCharacteristics
这正在 viewModel.EditorHabit
上更改 link,而不是从 args 复制信息。真的很蠢 :D 对不起。