android - currentBackStackEntry?.savedStateHandle?.getLiveData 在尝试向后移动数据时未收到有关更改的通知
问题描述
我有以下代码片段导航到 DialogFragment 目标 -
Navigation.findNavController(binding.root).navigate(DashboardFragmentDirections.actionDashboardFragmentToSettingsPasswordDialog())
这是我的 DialogFragment -
class SettingsPasswordDialog : DialogFragment() {
//UI Related
private lateinit var binding: DialogSettingsPasswordBinding
private lateinit var navController: NavController
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
binding = DialogSettingsPasswordBinding.inflate(LayoutInflater.from(context))
val builder = AlertDialog.Builder(requireContext())
builder.setView(binding.root)
isCancelable = true
initListeners()
val dialog = builder.create()
dialog.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
return dialog
}
private fun initListeners() {
navController = Navigation.findNavController(requireParentFragment().requireView())
hideKeyboard()
dismiss()
binding.dialogSettingsPasswordDialogSubmitButton.setOnClickListener {
val password = binding.dialogSettingsPasswordDialogTextInputEditText.text.toString()
if (password != sharedPreferences.settingsPassword) {
shortToast(requireContext(), getString(R.string.incorrect_password))
return@setOnClickListener
}
navController.popBackStack()
navController.currentBackStackEntry?.savedStateHandle?.set(CORRECT_SETTINGS_PASSWORD, "")
hideKeyboard()
}
}
}
如您所见,我正在使用savedStateHandle
liveData 对象将值返回给我的片段。但是在观察数据时,我再也没有得到任何回报——
private fun handleResultFromSettingsDialog() {
Navigation.findNavController(binding.root).currentBackStackEntry?.savedStateHandle?.getLiveData<String>(CORRECT_SETTINGS_PASSWORD)?.observe(viewLifecycleOwner) {
binding.mainActivityToolbar.title = getString(R.string.settings)
popToRootFragmentIfNotViewingIt(navController, "name", id)
navController.navigate(FragmentDirections.actionFragmentToMainSettingsFragment())
}
}
显然,为了让它发挥作用,我遗漏了一些东西。我错过了什么?
解决方案
推荐阅读
- sql - 预期获得的 CLOB 数据类型
- c# - C# - Reflection.Emit:返回对局部变量的引用
- for-loop - CMD 脚本:在“for”循环中未正确评估变量
- apache - 将 htaccess RewriteCond 转换为 web.config
- java - 设置 namespacePrefixMapper 定义前缀映射时的 Jaxb 属性异常
- javascript - i 和 svg 的 CSS 问题
- drools - kie-server-showcase /kie-server 被禁止
- python - 姜戈。如何查询 JsonField 记录中的数组?
- sql - 为每个“组”选择最新文档
- android - 在行项目上单击列表器以在 android 中进行表格布局