【问题标题】:Finish multiple activities on Xamarin Android在 Xamarin Android 上完成多项活动
【发布时间】:2018-10-14 19:55:58
【问题描述】:

我有一个包含多个活动的 Xamarin Android 应用程序:

我有 3 个活动 A1A2A3 将从这样的活动 X0 中调用:
X0 -> A1 -> A2 -> A3

X0 可以是我的应用程序的任何其他活动,因此我无权访问它的类型。 在活动 A3 我有一个按钮需要完成 A1A2A3 并返回到 X0.

我该怎么做?

谢谢

【问题讨论】:

  • 也许你可以考虑使用fragment代替Activity(因为UX相似)
  • 就像在 X0 中有一个片段,其中包含 A1 然后 A2 然后 A3 ?

标签: c# android xamarin


【解决方案1】:

由于 Activity X0 已经在回栈中,您可以执行以下操作 -

Intent intent = new Intent(A3.this, X0.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

加上flags后,Activity X0顶部的所有Activity都会被关闭,X0会变得可见,也不会重启。

【讨论】:

  • 感谢您的回答!这些标志帮助了我,但我的问题主要是如何获得 X0.class 因为它可以是多个活动
【解决方案2】:

在这种情况下,当您处理最后一个活动 (A3) 时,设置这些标志应该可以解决问题。 Intent.FLAG_ACTIVITY_NEW_TASK Intent.FLAG_ACTIVITY_CLEAR_TASK

或者,您可以使用片段直接从 A3 -> X0 过渡,而无需完成 A1 或 A2。

【讨论】:

    【解决方案3】:

    好的,我找到了一个可行的解决方案,但我猜它很不干净:

    当我在活动 X0 内启动活动 A1 时,我将活动 X0 的类型作为字符串(使用标志) .

    Intent newActivity = new Intent(this, typeof(A1));
    newActivity.PutExtra("endActivity", typeof(X0).Name);
    StartActivity(newActivity);
    

    在活动 A1 上,我得到这样的标志:

    string endActivityType = Intent.GetStringExtra("endActivity");
    

    然后,当我开始活动 A2A3 时,我一直使用标志将 X0 的类型作为字符串给出:

    Intent newActivity = new Intent(this, typeof(A2));
    newActivity.PutExtra("endActivity", endActivityType);
    StartActivity(newActivity);
    

    一旦我想在我的活动 A3 中返回 X0,我会这样做:

     Type typeX0 = Type.GetType("MyAppNamespace." + endActivityType);
     Intent intent = new Intent(this, typeX0);
     intent.AddFlags(ActivityFlags.ClearTop | ActivityFlags.SingleTop);
     StartActivity(intent);
    

    正如 Kashish 所说。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 2020-11-10
      相关资源
      最近更新 更多