首页 文章

使用Flag从任何活动返回MainActivity

提问于
浏览
0

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

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

但是当我使用flag FLAG_ACTIVITY_NEW_TASK (没有launchMode = "singleTask")时,它不能按预期工作,它会打开一个新的Activity . 堆栈是: A - B - C - D - A 不是文档写道:

FLAG_ACTIVITY_NEW_TASK在新任务中启动活动 . 如果任务已在您正在启动的活动上运行,则该任务将返回到前台,并恢复其上一个状态,并且活动将在onNewIntent()中接收新的意图 . 这会产生与上一节中讨论的“singleTask”launchMode值相同的行为 .

谁知道原因?谢谢 .

5 回答

  • 1

    我希望这个解决方案可以解决你的问题:: - 只将此设置为 Intent

    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
    
  • 0

    找到解决方案:

    注意:它将清除以前的所有活动,并且将会使用HomeActivity

    Intent homeActivity = new Intent(context, DJ_HomeActivity.class);
    homeActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
    context.startActivity(homeActivity);
    
  • -1

    在一个中尝试这个 . 您可以像这样在堆栈中添加和删除活动 .

    // 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()并传递添加活动时使用的密钥 .

  • 0

    覆盖每个活动的 onBackpress 方法:

    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_CLEAR_TASK); 
    startActivity(intent);
    
  • 2

    你应该使用下面的代码来跳转MainActivity.With 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" 所以当从 A 活动转移到另一个活动时,你必须使用 this.finish() 方法完成 A 活动 .

相关问题