#android #navigation #android-livedata
Вопрос:
У меня есть следующий фрагмент кода, который переходит к месту назначения фрагмента диалога —
Navigation.findNavController(binding.root).navigate(DashboardFragmentDirections.actionDashboardFragmentToSettingsPasswordDialog())
Вот мой фрагмент диалога —
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())
}
}
Очевидно, мне чего-то не хватает, чтобы это сработало. Чего мне не хватает?