Как использовать Фрагмент перехода на Android 8 (API 26, Oreo)

1

Я использую 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, общие элементы не анимируются. Вместо этого оба общих элемента переходят на свои конечные позиции, а все остальное анимируется.

Как я могу заставить его работать без использования библиотеки поддержки? Я пропускаю какой-то атрибут, который нужно установить?

Теги:
android-fragments
android-animation
android-transitions
fragmentmanager

1 ответ

0
Лучший ответ

После некоторых исследований и благодаря комментарию от Eugen Pechanec я пришел к выводу, что использование библиотеки поддержки v4 - это путь. Фрагменты платформы устарели в версиях API 28, поэтому рано или поздно нам придется размышлять.

Я не могу сказать, что библиотека поддержки работает безупречно, но по крайней мере переходы общих элементов анимируются.

Я не смог заставить его работать без библиотеки, потратив довольно много времени.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню