当活动之间的转换完成时如何得到通知?

Posted

技术标签:

【中文标题】当活动之间的转换完成时如何得到通知?【英文标题】:How to get notified when a transition between activities have finished? 【发布时间】:2015-11-03 16:24:23 【问题描述】:

正如标题所说...

我正在使用活动之间的转换,并且我想为这两个活动设置某种侦听器(或事件),用于转换完成时和转换开始之前。

这是创建过渡的示例代码:

    final Intent intent = new Intent(activity, TargetActivity.class);
    if (initialQuery != null)
        intent.putExtra(EXTRA_INITIAL_QUERY, initialQuery);
    final String transitionName = activity.getString(R.string.transition_name);
    ViewCompat.setTransitionName(viewToTransitionFromAndTo, transitionName);
    final ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
            viewToTransitionFromAndTo, transitionName);
    ActivityCompat.startActivityForResult(activity, intent, requestCode, options.toBundle());

【问题讨论】:

你可以看看这个androiddesignpatterns.com/2015/03/… @k0sh 我在那里看不到任何事件。如果我想推迟过渡,只有我应该调用的函数...... 因为没有这样的方法。 @k0sh 没有?如果我想在过渡结束后立即显示视图或动画视图怎么办?我至少可以自定义转换以区别对待新活动的某些视图(转换结束时淡入)? 据我所知,框架中没有这样的方法。你可以看看。这个简单的,你可以探索更多关于过渡github.com/toddway/MaterialTransitions 但同样,没有这样的方法:( 【参考方案1】:

您可以为您使用的任何过渡添加侦听器。例如:

getWindow().getSharedElementTransition().addListener(listener);

这将监听转换本身何时开始和结束。但是,它不会为您提供整个活动转换信息。例如,调用 Activity 不知道被调用 Activity 何时完成其转换。

假设顶部的过渡没有标记为半透明,当顶部的活动变得不透明时,底层的过渡将被告知停止 -- onStop() --。这并不意味着过渡已经完成,它只是意味着顶部活动的淡入已经完成。不过,一旦活动停止,我想不出你想做什么。但是,当活动是半透明的时,这将无济于事。

所以,不,如果你想让两个 Activity 都知道转换,你必须破解它。被调用的 Activity 总是知道转换何时完成(使用侦听器)在进入时,调用 Activity 总是知道退出时。

【讨论】:

满足我的需要。我会检查一下。谢谢你。现在有一个+1。你也可以回答这个问题吗:是否有可能使过渡(更具体地说是爆炸过渡)忽略特定视图,或者让我选择如何处理它们(可能对它们进行不同的过渡)? 是的,您可以按名称、实例、ID 或类来定位或排除视图。使用既包含排除您不想要的视图的爆炸,又包含仅针对这些视图的其他过渡(例如淡入淡出)的动画器集。 不错。你知道这种自定义的教程吗? 无论如何,该解决方案似乎对我有用,尽管您的函数名称错误。它应该是 getSharedElementEnterTransition() 或其他任何一个。 有谁知道如何为ActivityOptionsCompat.makeCustomAnimation 添加一个监听器?我不确定我应该将它添加到哪个过渡,或者它应该去哪里。我想在恢复活动中收听重新进入/退出转换的结束。

以上是关于当活动之间的转换完成时如何得到通知?的主要内容,如果未能解决你的问题,请参考以下文章

Java 执行器:当任务完成时,如何在不阻塞的情况下得到通知?

当 TextEditor 失去焦点时如何得到通知?

Android - 如何覆盖“后退”按钮,使其不会完成()我的活动?

从通知中导航到父活动

当 RxJava 发生不同事件时如何得到通知?

在WebView Android应用程序中推送通知