首页 > 解决方案 > 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()
        }
    }


}

如您所见,我正在使用savedStateHandleliveData 对象将值返回给我的片段。但是在观察数据时,我再也没有得到任何回报——

 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())
        }
    }

显然,为了让它发挥作用,我遗漏了一些东西。我错过了什么?

标签: androidnavigationandroid-livedata

解决方案


推荐阅读