使用标记

时间:2017-04-26 04:37:52

标签: android android-manifest android-task

我想从任何活动回到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
  在新任务中启动活动。如果任务是   已经为你现在开始的活动而运行,那个任务就是   带着它的最后一个状态恢复到前台   activity接收onNewIntent()中的新意图。

     

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

有谁知道原因?感谢。

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

找到解决方案:

注意:它将清除之前的所有活动,并且将来自家庭活动

case "View":
    try
    {
        ViewlookupControl.Visible = true;
        clsDataV12 clsdata1 = new clsDataV12();
        DataTable dt = new DataTable();
        dt = clsdata1.GetRecordset("bomview");
        ViewlookupControl.Fill(dt);
        ViewlookupControl.Focus();
    }
    catch (Exception ex)
    {
        BOMbuttonControl.Action = false;
        MessageBox.Show(ex.ToString(), "Error");
    }
    break;

答案 2 :(得分: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()并传递添加活动时使用的密钥。

答案 3 :(得分:0)

覆盖每项活动的onBackpress方法:

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

答案 4 :(得分:-1)

你应该使用下面的代码来跳转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 活动转移到另一个活动时,您必须使用{{1}完成 A 活动方法。