TaskStackBuilder在开始新活动时使用这种丑陋的过渡有什么问题。:
TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(this)
.addParentStack(ActivityB.class)
.addNextIntent(new Intent(this, ActivityB.class));
taskStackBuilder.startActivities();
这基本上是google的标准代码,但是如果你运行这段代码,那么在转到ActivityB时你会看到一个超级难看的过渡。
我猜它是因为它是一个新任务。但我不希望它看起来像我有什么可以做的吗?
谢谢!
答案 0 :(得分:0)
在深入研究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.FLAG_ACTIVITY_CLEAR_TASK
添加到第一意图的奇怪的TaskStackBuilder
,然后手动开始活动使用您想要的任何上下文。