Вызов startActivity с переходом общего элемента из onActivityResult - PullRequest
0 голосов
/ 22 мая 2019

Я звоню в onActivityResult

startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, imgv, imgv.transitionName).toBundle())

То, что я ожидаю, произойдет
ActivityB для запуска и отображенияс общим переходом элемента

Что на самом деле происходит
ActivityB не запускается / не отображается, пока приложение не будет свернуто и повторно открыто из последних (анимация также не отображаетсяс этой точки зрения).Без добавления перехода сцены он работает как обычно, и вызов этого из любого другого места в коде работает как ожидалось.

Я пробовал

  • runOnUiThread.
  • postponeEnterTransition() с startPostponedEnterTransition() во втором действии.
  • finishAfterTransition() это приводит к мерцанию и затем показывает активностьB , я не хочу заканчивать activityA , но только что попробовал это.
  • Используя вместо этого onActivityReenter(), я не могу этого сделать, так как он, кажется, не вызывается, когда я startActivityForResult(), чтобы использовать вход в Google.

Я подозреваю, что это связано с состоянием гонки с каркасом анимации

1 Ответ

1 голос
/ 23 мая 2019

onActivityResult() вызывается между onStart() и onResume() для современных версий API Android. Похоже, что возникла проблема при запуске новой операции с переходом общего элемента до возобновления вашей активности.

(Я не уверен, почему существует эта проблема. Возможно, другой пользователь может ответить на этот вопрос.)

Чтобы обойти эту проблему, я рекомендую сохранить информацию в onActivityResult(), а затем запросить ее в onResume():

private boolean launchNextActivity = false;

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (...) {
        this.launchNextActivity = true;
    }
}

@Override
protected void onResume() {
    super.onResume();

    if (launchNextActivity) {
        launchNextActivity = false;
        // do the launch
    }
}
...