传递一个 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)
.
我在玩棒棒糖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)
.