tgoop.com/android_live/489
Last Update:
Отправка данных между Fragments
#fragment
Для передачи данных между двумя фрагментами, существовало одно распространённое API — targetFragment
.
По сути, targetFragment
предоставляет нам способ получения данных через back stack, а всё что нам нужно — это переопределить onActivityResult
в вызывающем фрагменте.
Несмотря на кажующуюся простоту, это API — не очень удобное.
Во-первых, targetFragment
будет работать если фрагменты находятся в одном и том же менеджере.
Во-вторых, API разбросано по коду и становится непонятно, откуда прилетел тот или иной кусок данных.
Не так давно появилось новое решение — FragmentResultOwner
. По сути, это callback, который есть у каждого FragmentManager
.
Это изменение позволяет отдельным фрагментам взаимодействовать друг с другом, отправляя результаты фрагмента и прослушивая эти результаты, не требуя, чтобы фрагменты имели прямые ссылки друг на друга.
Работает он примерно так:setFragmentResultListener("requestKey") { key, bundle ->
val result = bundle.getString("name")
// Do something with the result...
}
А в том месте, где мы хотим отправить информацию нужно вызвать:tvSave.setOnClickListener {
setResult("requestKey", bundleOf("name" to updatedValue))
}
Точно такого же слушателя мы можем добавить и для childfragmentmanager
. В целом, новое API выглядит гораздо интереснее предыдущего и виден явный прогресс.
BY Android Live 🤖

Share with your friend now:
tgoop.com/android_live/489