如何将动态解析的活动名称添加到后台堆栈(不使用 PARENT_ACTIVITY)?
Posted
技术标签:
【中文标题】如何将动态解析的活动名称添加到后台堆栈(不使用 PARENT_ACTIVITY)?【英文标题】:How to add a dynamically resolved activity name to the back stack (without using PARENT_ACTIVITY)? 【发布时间】:2014-10-11 21:28:49 【问题描述】:目标是
1) 从 AppWidgetProvider 或任何其他后台任务启动活动 A(很简单)。
2) 点击返回按钮后,从活动 A 转到活动 B。
问题是我无法在 androidManifest.xml 中设置 PARENT_ACTIVITY,因为活动 B 类名是在运行时确定的。因此,在一种情况下,我需要参加活动 B,在另一种情况下,这是另一项活动。好像我不能在没有 PARENT_ACTIVITY 的情况下使用 TaskStackBuilder。
我可以在活动 A 的 finish() 方法中处理这个问题,但是当我运行 startActivity(intent) 时,将活动 B 添加到“回栈”应该是一种更简单的方法。有什么想法吗?
【问题讨论】:
你的 targetSdkVersion 是什么? min=14(4.0), target=16(4.1) 您是否尝试过startActivities(Intent[])
使用所有意图的有序数组来启动堆栈中所需的活动?
刚刚做了,成功了,非常感谢!我注意到的唯一奇怪的事情是,我在小部件和活动 A 之间看不到任何白色过渡屏幕。当我使用 startActivity(Intent) 启动活动 A 时 - 我看到它在闪烁。
不确定你的意思。
【参考方案1】:
使用startActivities(Intent[])
合成您自己的 Activity 实例的后台堆栈。例如:
Intent activityB = new Intent(context, ActivityB.class);
Intent activityA = new Intent(context, ActivityA.class);
// They should be ordered from bottom of stack to top of stack
Intent[] activities = new Intent[] activityB, activityA ;
context.startActivities(activities);
【讨论】:
谢谢!对于那些从 Activity 外部使用 startActivities() 的人,您必须在 activityB 上设置 FLAG_ACTIVITY_NEW_TASK 标志。还要确保过渡动画屏幕行为(... -> A、A -> B)与您预期的一样。【参考方案2】:试试这个:
@Override
public void onBackPressed()
Intent intent = new Intent(ActivityA.this , ActivityB.class);
startActivity(intent);
希望对您有所帮助! :)
【讨论】:
谢谢!一条路要走,但不是最好的,抱歉:)以上是关于如何将动态解析的活动名称添加到后台堆栈(不使用 PARENT_ACTIVITY)?的主要内容,如果未能解决你的问题,请参考以下文章