共享元素转换结束后调用OnActivityResult

时间:2018-03-11 08:09:14

标签: android xamarin

从活动A导航到活动B时,我正在使用共享元素转换。

我的问题 - 在活动B中调用SupportFinishAfterTransition会在OnActivityResult之后调用OnTransitionEnd,活动A中的间隔很小。因此,我在活动A中的用户界面(ImageView)是“闪烁”是因为图像源更新为间隔。

首先需要调用OnActivityResult来更新我的用户界面,然后进行退出转换。

我的代码: 活动A:

protected override void OnCreate(Bundle savedInstanceState)
{
    // Some code
    Window.SharedElementExitTransition.AddListener(this);
}

此代码首先调用:

public void OnTransitionEnd(global::Android.Transitions.Transition transition)
{
}

此代码第二次调用,但我想首先:

protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
{
    base.OnActivityResult(requestCode, resultCode, data);
}

活动B:

SetResult(Result.Ok, intent);
SupportFinishAfterTransition();

2 个答案:

答案 0 :(得分:1)

使用 onActivityReenter 代替OnActivityResult。在显示活动之前执行onActivityReenter,在显示活动之后执行OnActivityResult。

@Override
    public void onActivityReenter(int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
             //do your work here

             //example of getting data:
             int someData = data.getIntExtra("EXTRA_CODE", -1);
        }
}

答案 1 :(得分:0)

startActivityForResult返回后,想要进行过渡时,您必须意识到这些事情:

i。)您需要指定一个windowSharedElementReenterTransition,通常只指定windowSharedElementEnterTransitionwindowSharedElementEnterTransition

ii。)在重新输入的活动的onActivityReenter中,您需要调用postponeEnterTransition(),然后根据需要更新视图并再次调用startPostponedEnterTransition()

onActivityResult仅在上一个活动完成时调用,而onActivityReenter在前一个活动仍在运行时调用(您可以在其中获取意图以更新UI)。

这是一篇将光带入黑暗的文章: https://www.androiddesignpatterns.com/2015/03/activity-postponed-shared-element-transitions-part3b.html