Привет! С вами Android Broadcast. Прошли 2 недели и очередной релиз библиотек Jetpack от Google уже с нами. Вышло долгожданное исправление множества багов в Fragment из-за рефакторинга внутри FragmentManager, Activity Result API и много другого. Все самое интересное вы найдете ниже, а все подробности на сайте
Если вы хотите узнавать про последние новости Android разработки сразу, тогда подпишитесь на Telegram канал Android Broadcast или следите за ними в формате видео на YouTube канале, а также подкасте
Activity 1.2.0
Все изменения здесь
Activity Result API - новое API для получения результата вызова Activity
val getContent = registerForActivityResult(GetContent()) { uri: Uri? ->
// Handle the returned Uri
}
override fun onCreate(savedInstanceState: Bundle?) {
// ...
val selectButton = findViewById<Button>(R.id.select_button)
selectButton.setOnClickListener {
// Pass in the mime type you'd like to allow the user to select
// as the input
getContent.launch("image/*")
}
}
ComponentActivity теперь реализует ContextAware, что позволяет асинхронно получить Context до вызова
Activity.onCreate()
. Поддержка Coroutine уже добавленаBackport метода Activity.reportFullyDrawn(), который теперь работает на всех версиях API, исправлены баги и добавлен трейсинг
Добавлена поддержка ViewTreeLifecycleOwner
Fragment 1.3.0
Все изменения здесь
Большой рефакторинг внутри FragmentManager, который исправил множество багов в работе Fragment. Подробности читайте в статье от Ian Lake
Интеграция Activity Result API
Новое API для передачи результата между двумя Fragment
// Fragment1
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
}
}
// Fragment 2
button.setOnClickListener {
val result = "result"
// Use the Kotlin extension in the fragment-ktx artifact
setFragmentResult("requestKey", bundleOf("bundleKey" to result))
}
FragmentOnAttachListener - замена
onAttachFragment()
изFragmentActivity
иFragment
, которая позволяет делегировать событие различным компонентам.Стандартные эффекты анимаций
TRANSITION_*
теперь используют Animator вместо AnimationУлучшения FragmentScenario
Fragment.setRetainInstance() теперь deprecated. Используйте ViewModel.
Добавлена поддержка ViewTreeLifecycleOwner
Адаптеры, использующие Fragment, для ViewPager 1 теперь deprecated. Мигрируйте на ViewPager 2.
Lifecycle 2.3.0
Все изменения здесь
SavedStateHandle
теперь поддерживает не parcelable классыLifecycleRegistry
теперь используетDESTROYED
как последнее состояниеLifecycleRegistry
теперь проверяет что методы вызываются на главном потоке, в противном случае - крешДобавлены методы
downFrom(State)
,downTo(State)
,upFrom(State)
,upTo(State)
для генерации события, чтобы перевести Lifecycle в нужное состояние необходимой последовательностью событий.Новое API ViewTreeLifecycleOwner, которое позволяет получить
LifecycleOwner
andViewModelStoreOwner
, основываясь куда добавлена View. Например, это уже реализовано в Activity 1.2.0 и Fragment 1.3.0.Kotlin расширение LiveData.observe() теперь deprecated. Оно больше не нужно из-за появления SAM для Kotlin интерфейсов.
SavedState 1.1.0
Все изменения здесь
Добавлено API
ViewTreeSavedStateRegistryOwner
, которое позволяет получитьSavedStateRegistry
на основе View.savedstate-ktx
Core Role 1.0.0
Все изменения здесь
Добавлено API RoleManagerCompat