【问题标题】:Finishing an Activity with transition shows the previous Activity from the activity stack first and then transitions to the new Activity使用转换完成一个活动首先显示活动堆栈中的前一个活动,然后转换到新的活动
【发布时间】:2021-05-01 12:37:05
【问题描述】:

我的 Android 应用程序中有 2 个活动 - 活动 A 和活动 B。 当用户按下 Activity A 上的按钮时,他会被导航到 Activity B。 我希望活动 A 在进入下一个活动后关闭,并从活动堆栈中完全删除。 我尝试添加 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); ,但这不起作用,因为按下后退按钮后仍然可以访问 Activity A。

我添加了finishAffinity();,这很有效,但是在转换时,活动堆栈中的前一个活动变得可见,然后它转到活动 B。

视频 (此处显示应用程序抽屉,然后转到 Activity B)-

代码 -

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(MainActivity.this);
Intent i = new Intent(MainActivity.this, MainActivity2.class);
startActivity(i, options.toBundle());
finishAffinity();

是否有任何修复,使之前的活动不可见并且活动也关闭?


编辑:我尝试了finish()finishAfterTransition()supportFinishAfterTransition() 而不是finishAffinity(),但仍然可以看到前一个屏幕。 所以我猜finishAfterTransition()有问题

【问题讨论】:

    标签: java android android-studio android-layout


    【解决方案1】:

    我通过在清单文件中将android:noHistory="true" 属性添加到活动(必须从堆栈中删除)解决了这个问题。 修改后的java代码中无需使用finish()

    方法 2 - 请参考@Pratyay 的答案。

    【讨论】:

      【解决方案2】:

      你必须使用完成,但像这样:

      startActivity(Your Activity here)
      

      然后Finish() 如果你倒车你可以看到黑屏很短时间这样做

      【讨论】:

      • 你好,我只做了这个,请看上面的代码
      【解决方案3】:
      @Override
          public void onBackPressed() {
              finishAffinity();
          }
      

      在 Activity B 中使用此功能,这将在按下返回按钮时退出应用程序。并且不要在 Activity A 中使用任何 finish();finishAffinity();。这样可以顺利过渡

      【讨论】:

      • 这并不能解决问题。即使在使用finish() 之后,前一个屏幕仍然可见。
      • 明白了!谢谢,参考我下面的方法。这种方法会增加应用程序使用的内存,因为活动会堆积起来,并且不能总是这样做(例如,如果我们不想在后按时关闭活动)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多