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

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

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

1 Ответ

0 голосов
/ 21 апреля 2019

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

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

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

...