TaskStackBuilder到底有什么问题,它在开始新 Activity 时会使用此丑陋的过渡:

    TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(this)
            .addParentStack(ActivityB.class)
            .addNextIntent(new Intent(this, ActivityB.class));
    taskStackBuilder.startActivities();

这基本上是google的标准代码,但是如果您运行此代码,则转到ActivityB时会看到一个非常丑陋的过渡。

我猜是因为它是一个新任务。但是我不希望它看起来像这样吗?

谢谢 !

最佳答案

在深入了解TaskStackBuilder的实现之后,问题在于它迫使将Intent.FLAG_ACTIVITY_CLEAR_TASK添加到堆栈中的第一个intent中,这使转换变得很丑陋,因此请使用以下命令启动堆栈:

Intent[] intents = TaskStackBuilder.create(this)
            .addParentStack(ActivityB.class)
            .addNextIntent(new Intent(this, ActivityB.class))
            .getIntents();
if (intents.length > 0) {
    intents[0].setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);// Or any other flags you want, but not the `.._CLEAR_..` one
}
// `this` inside current activity, or you can use App's context
this.startActivities(intents, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

这里的想法是仍然使用TaskStackBuilder创建您的 Intent 栈,然后删除Intent.FLAG_ACTIVITY_CLEAR_TASK添加到第一个 Intent 的怪异TaskStackBuilder,然后使用所需的任何上下文手动启动 Activity 。

关于Android TaskStackBuilder的丑陋过渡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37666568/

10-13 03:05