Общий элемент перехода прерывается, когда для Activity вызывается onStop()

Я открываю из ActivityA ActivityB с общим переходом элемента. Это работает должным образом. Когда я нажимаю кнопку «Назад», общий элемент также работает правильно, и я вижу анимацию закрытия.

Но если я нажимаю кнопку "Домой" и после этого возвращаюсь в приложение (ActivityB), а после этого нажимаю "Назад" для перехода в ActivityA, то переход не работает.

Та же ситуация с тремя действиями.

ActivityA -(работа)-> ActivityB -(работа)-> ActivityC

после этого начинаю нажимать кнопку "Назад"

ActivityC -(работает)-> ActivityB -(НЕ РАБОТАЕТ)-> ActivityA

работа - это означает работу с общим элементом перехода, и я вижу анимацию

Для запуска Activity я использую

ActivityOptionsCompat options = ActivityOptionsCompat
                        .makeSceneTransitionAnimation(getActivity(), itemView, transitionName);
startActivity(intent, options.toBundle());

Попробуйте изменить манифест (НЕ РАБОТАЕТ)

android:name=".ActivityB"
android:launchMode="singleTask"
android:parentActivityName=".ActivityA"

Попробуйте сохранить общие элементы (НЕ РАБОТАЕТ)

setEnterSharedElementCallback(new SharedElementCallback() {
            @Override
            public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) {
                if (names.size() > 0)
                    mSharedElementsNames.addAll(names);
                else
                    names.addAll(mSharedElementsNames);

                if (sharedElements.size() > 0)
                    mSharedElementsMap.putAll(sharedElements);
                else
                    sharedElements.putAll(mSharedElementsMap);
            }
        });

Я заметил, что после сворачивания приложения onMapSharedElements() не вызывается при нажатии «Назад». В противном случае вызов происходит.

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


person vanilaboy    schedule 28.08.2019    source источник
comment
Я не могу поверить, что нет других сообщений об этом. Никто не замечал этого раньше?   -  person xiaoyu    schedule 06.12.2019
comment
Я тоже столкнулся с этой ошибкой. Вы нашли какие-либо решения для него?   -  person Daniel Jr McCoy    schedule 19.02.2020
comment
сообщение о проблеме: issuetracker.google.com/issues/158553240   -  person kakajika    schedule 22.06.2020


Ответы (1)


Я решил эту проблему, следуя этому ответу.

Просто добавьте приведенный ниже фрагмент кода в onStop ActivityB.

override fun onStop() {
    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.Q && !isFinishing) {
        Instrumentation().callActivityOnSaveInstanceState(this, Bundle())
    }
    super.onStop()
}
person Robust    schedule 26.06.2020