如何将动态解析的活动名称添加到后台堆栈(不使用 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)?的主要内容,如果未能解决你的问题,请参考以下文章

添加到后台堆栈时如何维护片段状态?

将活动发送到后台而不完成

如何将活动类添加到动态链接?

恢复片段而不重新创建?

Android从后台堆栈中删除活动

来自后台堆栈的片段 onResume