Как передать данные из фрагмента в прежний фрагмент?

Как передать данные из фрагмента в прежний фрагмент (из фрагмента В в фрагмент А)? Вот мой код, но он даже не реагирует на получение данных. Чтобы убедиться в этом, я установил простое всплывающее уведомление.

Фрагмент А

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

  val view = inflater.inflate(R.layout.infos_trafic, container, false)
  buttonGoToB = view.findViewById(R.id.fragment_B)      

  findNavController().currentBackStackEntry?.savedStateHandle?.getLiveData<String>("key")?.observe( 
  viewLifecycleOwner) { result -> Toast.makeText(this, "Ok", Toast.LENGTH_SHORT).show()
  }

  buttonGoToB.setOnClickListener { goToB() }

  return view
}


private fun goToB()
{
    parentFragmentManager.commit{
        setCustomAnimations(R.anim.slide_up, R.anim.slide_down, R.anim.slide_up, R.anim.slide_down)
        add(R.id.main_nav_host, FragmentB())
        addToBackStack(null)
    }
}

Фрагмент В

buttonBack.setOnClickListener {
findNavController().previousBackStackEntry?.savedStateHandle?.set("key", "myString")
parentFragmentManager.popBackStack()
}

Ответы (2 шт):

Автор решения: Sarcosuchus

Решение по ссылке

Фрагмент А

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // Use the Kotlin extension in the fragment-ktx artifact
    setFragmentResultListener("requestKey") { requestKey, bundle ->
        // We use a String here, but any type that can be put in a Bundle is supported
        val result = bundle.getString("bundleKey")
        // Do something with the result
    }
}

Фрагмент В

button.setOnClickListener {
    val result = "result"
    // Use the Kotlin extension in the fragment-ktx artifact
    setFragmentResult("requestKey", bundleOf("bundleKey" to result))
}
→ Ссылка
Автор решения: Vlad Orlinskas

Возможно вы не хотите имено передавать между фрагментами bundle, так как вопрос можно решить общей ViewModel для этих фрагментов. Инициализируйте viewModel в активити, которой принадлежат эти фрагменты. Теперь в своих фрагментах сделайте следующее:

lateinit var viewModel: MainViewModel

    activity?.let {
        viewModel = ViewModelProvider(it, defaultViewModelProviderFactory).get(MainViewModel::class.java)
    }

Теперь фрагментам доступно все, что есть в viewModel. Например можно инициализировать LiveData в вашей viewModel и подписаться на изменения во фрагментах.

→ Ссылка