将Bundle传递给startActivityForResult以实现场景转换

时间:2015-06-23 00:14:44

标签: android android-5.0-lollipop transitions

我正在玩Lollipop sceneTransitionAnimations

要使其发挥作用,您需要在调用活动的getWindow().setExitTransition()中实施getWindow().setReenterTransition() + onCreate, 被叫活动getWindow().setEnterTransition()中的getWindow().setReenterTransition() + onCreate

然后,当您致电startActivity时,您必须通过致电BundleActivityOptions.makeSceneTransitionAnimation(getActivity()).toBundle()传递给您获得的该功能。

这很好用。但是,我需要使用startActivityForResult启动活动。此功能只需IntentrequestCode,但不需要Bundle。使用putExtras将捆绑包放入intent中不起作用。

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

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

我在片段中,我有一个项目列表。单击某个项目时,我会启动另一项活动。

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不提供此功能,因此我必须使用其父活动 - 因此getActivity()

这个工作:

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

1 个答案:

答案 0 :(得分:9)

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

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