【问题标题】:Android on BackPress reach 3rd previous activity using finish() onlyBackPress 上的 Android 仅使用 finish() 达到前 3 个活动
【发布时间】:2017-02-10 10:39:44
【问题描述】:

Activity的运行流程

A->B->C->D

  • 从 D onBackPressed() 到达 A
  • 从 C onBackPressed() 到达 B

我不想只使用finish来调用startActivity(new Intent(context, A.class));

【问题讨论】:

  • 您在任何活动中处理onBackPressed 吗?如果是这样,请在其中发布您所做的事情
  • 如果所有这些活动 A、B、C 和 D 都是单个任务的一部分,那么您应该将它们转换为 Fragment 而不是 Activity。 Fragments 可以轻松处理此类场景。
  • 当从外部进入应用程序时,例如,通过点击通知,您可以使用TaskStackBuilder构建一个人工backstack。可能这也可以帮助解决您的问题。

标签: android android-activity onbackpressed


【解决方案1】:

感谢您的回复,但我最近用这种方式解决了问题。

Intent intent = new Intent(this, A.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    startActivity(intent);
    finish();

【讨论】:

    【解决方案2】:

    这很棘手,但是您可以使用一些意图数据处理后按转到 d 到 c 检查此意图数据是否与您从 d 发送的匹配,如果真正的回调新闻小说野兔使用相同的概念,直到您将通过 d> c>b>a 直接这不会显示 c 或 d 它将快速工作,否则在后按时使用简单的代码。

        Intent intents = new Intent(getActivity(),ActivityA.class);
       intents.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
     startActivity(intents);
    

    【讨论】:

      【解决方案3】:

      覆盖activity D的onbackpressed(),

      Intent intent = new Intent(getApplicationContext(),ActivityA.class);
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
      startActivity(intent);
      

      从活动C你可以使用finish()来活动B;

      【讨论】:

        【解决方案4】:

        这样做的正确方法是在D 中覆盖onBackPressed(),然后cgo 回到A,如下所示:

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

        请解释您为什么不想使用这种方法?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-06
          相关资源
          最近更新 更多