传递一个 Bundle 给 startActivityForResult 来实现 Scene Transitions

Pass a Bundle to startActivityForResult to achieve Scene Transitions

我在玩棒棒糖sceneTransitionAnimations

要使其正常工作,您需要在调用 activity 的 onCreate 中实施 getWindow().setExitTransition() + getWindow().setReenterTransition(), 和 getWindow().setEnterTransition() + getWindow().setReenterTransition() 在被调用的 activity 的 onCreate.

然后,当您调用 startActivity 时,您必须将 Bundle 传递给您通过调用 ActivityOptions.makeSceneTransitionAnimation(getActivity()).toBundle().

获得的函数

这很好用。但是我需要使用 startActivityForResult 启动 activity。这个函数只需要一个 Intent 和一个 requestCode,但没有 Bundle。使用 putExtras 将捆绑包放入 Intent 中无效。

当我想使用 startActivityForResult 时,如何让这些漂亮的 Lollipop 过渡工作?

编辑,因为我被要求提供代码:

我在片段中,我有一个项目列表。单击一个项目后,我将启动另一个 activity.

Intent intent = new Intent(context, otherActivity.class);
Bunde bundle = null; 
if (android.os.Build.VERSION.SDK_INT >= 21)
    bundle = ActivityOptions.makeSceneTransitionAnimation(getActivity()).toBundle();

现在有两个区别。这个有效:

getActivity().startActivity(intent, bundle);

Fragment 不提供此功能,因此我必须使用其父 activity - 因此 getActivity().

这个工作:

intent.putExtras(bundle);
startActivity(intent);

感谢 Squonk,我开始意识到我正在尝试使用的方法 startActivityForResult(Intent intent, int requestCode, Bundle options) 确实存在。

我犯了一个错误,试图从一个片段开始,它没有实现 - 与 startActivity(Intent intent, Bundle bundle) 相同 - 所以你需要调用 getActivity().startActivityForResult(Intent intent, int requestCode, Bundle options) .