【问题标题】:How to finish the main activity from other Activity如何从其他 Activity 完成主要 Activity
【发布时间】:2018-02-06 07:32:44
【问题描述】:

您好,您如何完成主要活动 假设有3个Activity和1个Fragment

LoginActivity、MainActivity、infoFrgMent、ChangePwdActivity。

这种情况是当我登录LoginActivity然后MainActivity 将显示LoginActivityfinish() 然后我将转到我的信息“infoFrgMent”然后我想在我更改密码后更改我的密码密码。

LoginActivity 将再次出现以重新登录,但每当我尝试按回MainActivity 时出现并没有出现finished

【问题讨论】:

    标签: java android


    【解决方案1】:

    您需要从堆栈中删除以前的活动

    setFlagsintentMainActivityLoginActivity

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

    参考:https://developer.android.com/guide/components/activities/tasks-and-back-stack.html

    【讨论】:

    【解决方案2】:

    您需要添加 Intent.FLAG_CLEAR_TOP。此标志确保堆栈中目标活动之上的所有活动都已完成并显示。

    您需要的另一件事是 SINGLE_TOP 标志。如果堆栈中已经创建了一个 Activity,则使用这个可以防止 Android 创建新的 Activity。

    请注意,如果 Activity 已经创建,带有这些标志的 Intent 将在目标 Activity 中名为 onNewIntent(intent) 的方法中传递(您需要重载它来处理它)。

    然后在 onNewIntent 中,您有一个名为 restart 的方法,或者会调用 finish() 并向自身发起新意图的方法,或者有一个用于设置新数据的 repopulate() 方法。我更喜欢第二种方法,它更便宜,而且你总是可以将 onCreate 逻辑提取到一个单独的方法中,你可以调用它来调用 populate。

    【讨论】:

      【解决方案3】:

      要完成另一个 Activity,您必须创建一个静态方法来完成这个就像这里:

      MainActivity.java

      private static MainActivity activity;
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
      
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main_activity);
      
          activity = this;
      
      }
      
      public static void finishThis()
      {
          try
          {
              if (activity != null)
              {
                  activity.finish();
              }
          }
          catch (Exception ex)
          {
              ex.printStackTrace();
          }
      }
      

      然后这样称呼它:

      AnotherActivity.java

      MainActivity.finishThis();
      

      就是这样

      【讨论】:

      • 为我工作谢谢!
      • 将活动(上下文的子类)放在静态上下文中是一个可怕的想法。它可能导致内存泄漏。见:stackoverflow.com/questions/37709918/…
      • 这是非常糟糕的做法。静态上下文会导致内存泄漏。
      • @BaluSangem & Zoe我知道,但它会导致内存泄漏,但解决方案是什么...如果你提供一个完美的解决方案而不是投反对票会更好。
      • @VishalChhodwani 哎呀。否决票不是我的。请在下面查看我的解决方案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-11
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多