Я использую FragmentManager для замены одного фрагмента другим на переход с общим элементом (два элемента являются общими). Вот код (на котлинском):
private fun showList(edited: EditedAlarm) {
fragmentManager.findFragmentById(R.id.main_fragment_container)?.apply{
exitTransition = Fade()
}
// create a new Fragment and set transitions
val listFragment = AlarmsListFragment().apply {
sharedElementEnterTransition = moveTransition()
enterTransition = Fade()
}
fragmentManager.beginTransaction()
.addSharedElement(viewHolder.digitalClock(), "clock" + viewHolder.alarmId())
.addSharedElement(viewHolder.container(), "onOff" + viewHolder.alarmId())
.replace(R.id.main_fragment_container, listFragment)
.commit()
}
Сам переходы определяется так:
private fun moveTransition(): TransitionSet {
return TransitionSet().lollipop {
ordering = TransitionSet.ORDERING_TOGETHER
addTransition(ChangeBounds())
addTransition(ChangeTransform())
}
}
Этот код работает на моем Moto Z2 Play (Android близко к AOSP) и на моем Motorola One (Android ONE), только если:
- Целевой API ниже, чем 26
- ИЛИ Используются фрагменты библиотеки поддержки v4 (с небольшими изменениями - используйте supportFragmentManager)
Однако идентификатор не работает должным образом, если целевой API равен 26 или выше. Если для целевого API установлено значение 26, общие элементы не анимируются . Вместо этого оба общих элемента переходят в конечные позиции, а все остальное анимируется.
Как я могу заставить его работать без использования библиотеки поддержки? Я пропускаю какой-то атрибут, который нужно установить?