0

我想从任何活动返回 MainActivity。例如,我的活动堆栈: A - B - C - D. A (MainActivity) 位于底部, D 位于堆栈顶部。

当我使用android:launchMode="singleTask". 我可以按照我的预期在任何活动中回到 A。

但是当我使用标志FLAG_ACTIVITY_NEW_TASK(没有launchMode =“singleTask”)时,它不能按预期工作,它会打开一个新的活动。堆栈是: A - B - C - D - A 不像文件中写道:

FLAG_ACTIVITY_NEW_TASK
在新任务中启动活动。如果您现在正在启动的 Activity 的任务已经在运行,则该任务将被带到前台并恢复其最后状态,并且该 Activity 在 onNewIntent() 中接收新意图。

这会产生与上一节中讨论的“singleTask”launchMode 值相同的行为。

有人知道原因吗?谢谢。

4

5 回答 5

3

我希望这个解决方案可以解决您的问题::- 仅将其设置为Intent

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
于 2017-04-26T04:58:54.637 回答
1

找到解决方案:

注意:它将清除所有以前的活动并启动 HomeActivity

Intent homeActivity = new Intent(context, DJ_HomeActivity.class);
homeActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(homeActivity); 
于 2017-04-26T05:05:35.060 回答
0

试试这个。您可以像这样从堆栈中添加和删除活动。

// Add activity
public static void addActivities(String actName, Activity _activity) {
    if (Config.screenStack == null)
        Config.screenStack = new HashMap<String, Activity>();
    if (_activity != null)
        Config.screenStack.put(actName, _activity);
}

// Remove Activity
public static void removeActivity(String key) {
    if (Config.screenStack != null && Config.screenStack.size() > 0) {
        Activity _activity = Config.screenStack.get(key);
        if (_activity != null) {
            _activity.finish();
        }
    }
}

用户在 setContentView 之前添加活动以添加到堆栈中。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addActivities("DemoActivity", DemoActivity.this)
    setContentView(R.layout.activity_create_feed_post);
}

对于删除活动,您只需调用 removeActivity() 并传递您在添加活动时使用的密钥。

于 2017-04-26T04:40:49.000 回答
0

每个活动的覆盖onBackpress方法:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_CLEAR_TASK); 
startActivity(intent);
于 2017-04-26T04:45:59.620 回答
-1

您应该使用下面的代码跳转到 MainActivity。使用intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)以下意图标志,它会清除所有先前的活动。

  Intent intent = new Intent(this, DashboardActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);

注意一件事,你使用android:launchMode="singleTask"了所以当从一个活动移动到另一个活动时,你必须通过使用方法来完成一个活动。this.finish()

于 2017-04-26T05:14:59.430 回答