我正在onActivityResult中打电话
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, imgv, imgv.transitionName).toBundle())
我期望发生的事情
activityB 将通过共享元素转换启动并显示
实际发生的情况
activityB 不会启动/显示,直到将应用程序最小化并从最新版本重新打开为止(此时动画也不会显示)。无需添加场景过渡,它可以正常工作,并且可以在代码中的任何其他地方调用它,如预期的那样。
我已经尝试过
postponeEnterTransition()
与
startPostponedEnterTransition()
在第二活动中。finishAfterTransition()
导致闪烁,然后显示 activityB ,我不想完成 activityA ,而只是尝试了一下。onActivityReenter()
,因为我startActivityForResult()
使用Google登录时似乎没有被调用。我怀疑这与动画框架的竞争条件有关
答案 0 :(得分:1)
onActivityResult()
和onStart()
之间调用 onResume()
。听起来好像在恢复活动之前用共享元素转换开始新的活动 时出现问题。
(我不确定为什么会出现此问题。也许其他用户可以回答。)
要变通解决此问题,建议将信息保存在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
}
}
答案 1 :(得分:0)
如果您使用的是androidx生命周期,则可以在onActivityResult
中使用以下代码:
lifecycleScope.launchWhenResumed {
val bundle = ActivityOptions.makeSceneTransitionAnimation(this@MyActivity, imgv, imgv.transitionName).toBundle()
startActivity(intent, bundle)
}
此行为与接受的答案相同。