У меня есть 2 RecyclerViews - Overview & Detail RV. Когда пользователь щелкает элемент в обзоре RV, выбранный вид добавляется как общий элемент в транзакции фрагмента и переходит в подробный RV.
Проблема:
Движущаяся часть перехода работает очень хорошо. Однако после завершения перехода общий элемент View не удаляется из Detail RV! Когда я прокручиваю деталь RV, я вижу 2 экземпляра общего элемента! Один прокручивает остальной контент (это то, что я хочу), а другой застревает в фиксированной позиции на экране. Только когда я прокручиваю общий элемент назад и обратно в окно просмотра RV, вызывая повторную привязку, нежелательный общий элемент исчезнет.
Что вызывает автоматическое удаление общего элемента View?
Код:
Вот как я добавляю выбранный View в качестве цели для переходов общих элементов.
// OverviewAdapter.kt:
view.setOnClickListener { view ->
val sharedElements = getAllChildrenWithTransitionNames(view) // returns Map<String,View>
supportFragmentManager.beginTransaction()
.replace(R.id.fragmentContainer, DetailFragment())
.addToBackStack(null)
.also{ ft ->
ft.setReorderingAllowed(true)
sharedElements.forEach { (tn, view) ->
ft.addSharedElement(view, tn)
}
}
.commit()
}
Вот как я готовлю переход общего элемента в DetailFragment. Выбранный элемент всегда будет первым уникальным элементом в DetailFragment, поэтому он гарантированно будет отрисован.
// DetailFragment.kt
class DetailsTransition : TransitionSet() {
init {
addTransition(ChangeBounds())
addTransition(ChangeTransform())
addTransition(ChangeImageTransform())
}
}
val listAnimator = MyRVItemAnimator()
override fun onCreate(saved: Bundle?){
listAnimator.blockAnimations = true // Detail RV has an item animator. This blocks animations during transitions to prevent flicker
sharedElementEnterTransition = DetailsTransition().also {
it.addListener(
onEnd = {
listAnimator.blockAnimations = false
}
)
}
// DetailAdapter.kt
override fun onBindViewHolder(holder: VH, position: Int) {
detailFragment.startPostponedEnterTransition()
}
Я также убедился, что все transitionNames
уникальны и совпадают. Так почему же общий элемент View не удаляется автоматически после завершения перехода?