54

我正在使用 Android L 转换传递一个ActivityOptions包的意图。如何以相同的意图重现动画TaskStackBuilder

这是我目前使用单一的工作方法Intent

startActivity(myIntent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

这是我的尝试TaskStackBuilder

 TaskStackBuilder builder = TaskStackBuilder.create(this);
 builder.addNextIntentWithParentStack(myIntent);
 builder.startActivities(ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

但是动画产生了一种奇怪的效果,与“单一意图”版本不同。

我也尝试过:

builder.addNextIntent(myIntent);

代替:

builder.addNextIntentWithParentStack(myIntent);
4

2 回答 2

1

在深入TaskStackBuilder了解 的实现之后,问题是它强制添加Intent.FLAG_ACTIVITY_CLEAR_TASK到堆栈中的第一个意图,这会产生奇怪的效果,所以使用以下命令启动堆栈:

Intent[] intents = TaskStackBuilder.create(this)
                     .addNextIntentWithParentStack(myIntent)
                     .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.FLAG_ACTIVITY_CLEAR_TASKTaskStackBuilder

于 2019-12-29T14:58:31.883 回答
0

尝试使用:

TaskStackBuilder.create (Context context)

返回一个新的 TaskStackBuilder 以启动一个由一系列活动组成的新任务栈。参数 -

Context context: 将启动新任务堆栈或生成PendingIntent.

返回 TaskStackBuilder- 一个新的 TaskStackBuilder。

于 2016-11-13T03:33:25.123 回答