Android 如何从后堆栈中删除Activity setContentView?

Android 如何从后堆栈中删除Activity setContentView?,android,android-fragments,kotlin,back-stack,fragment-backstack,Android,Android Fragments,Kotlin,Back Stack,Fragment Backstack,关于Stackoverflow有一百个问题,但没有一个是关于我的具体问题 我将以以下代码作为活动类中的静态函数启动活动: fun startForResult(activity: Activity, code: Int) { val intent = Intent(activity, MyActivity::class.java) activity.startActivityForResult(intent, code) activity.overridePendingT

关于Stackoverflow有一百个问题,但没有一个是关于我的具体问题

我将以以下代码作为活动类中的静态函数启动活动:

fun startForResult(activity: Activity, code: Int) {
    val intent = Intent(activity, MyActivity::class.java)
    activity.startActivityForResult(intent, code)
    activity.overridePendingTransition(R.anim.none, R.anim.none)
}
当MyActivity在中启动时,运行onCreate和其中的
setContentView(R.layout.activity)
。这似乎在后面的堆栈上。该活动只有一个全屏的框架布局,是我要加载的片段的占位符/框架。我的活动非常简单,就像一个有3个片段/屏幕的向导,都是全屏的。一旦我的activity OnCreate完成,我的演示者将使用如下代码加载第一个片段FragmentA:

supportFragmentManager
    .beginTransaction()
    .replace(R.id.myContentFrame, FragmentA.newInstance())
    .addToBackStack(null)
    .commit()
这也在后堆栈上。用户按下“下一步”按钮,“我的演示者”运行以下代码:

supportFragmentManager
    .beginTransaction()
    .replace(R.id.myContentFrame, FragmentB.newInstance())
    .addToBackStack(null)
    .commit()
当用户按下FragmentB上的后退按钮时,它会将用户带回FragmentA,这很好。我的问题发生在他们按下FragmentA上的back按钮时,它会将他们带到一个清晰的屏幕,这显然是
setContentView(R.layout.activity)
事件,它已添加到后堆栈中,我将返回到它。因此,我希望不将该事件、活动的开始及其不可见的布局添加到后堆栈中。当用户在FragmentA上并按下back按钮时,我希望活动刚刚结束。 我已经尝试了很多不同的方法来摆脱我的后堆栈中的这个
setContentView(R.layout.activity)
事务,但没有任何效果。我想有一个简单的解决办法,比如设置一面旗帜,但我一直没有找到。在过去,我已经重写了OnBackPress方法,我认为这会起作用,但我仍然好奇是否有一种更简单的方法可以在不需要重写OnBackPress的情况下从后堆栈中弹出第一个(活动)项


我遗漏了什么?

我认为您不需要使用片段A添加到后堆栈中。在片段中,用户的后推活动将完成

谢谢,你的建议奏效了!我认为对我来说,问题是我一直认为后堆栈是一堆片段或活动,而我认为它是一堆从一个到另一个的事务。这让人很难理解。@szaske确定它喜欢活动堆栈,只要按下back,主机活动就会检查它的backbackback中的任何片段,当back Stack为空时,它将是finish()。