我如何从Back Stack中删除我的Activity setContentView?

问题描述 投票:1回答:1

关于Stackoverflow的这个问题有一百个,但都与我的特定问题无关。

我正在使用此代码作为我的Activity类中的静态函数启动我的Activity:

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)。这似乎在Back Stack上进行。该活动只有一个全屏的FrameLayout,并且是我要加载的片段的占位符/框架。我的活动非常简单,就像一个向导,具有3个片段/屏幕,全屏显示。一旦我的活动OnCreate完成,演示者将使用以下代码加载第一个Fragment,即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上的后退按钮时,就会出现我的问题,这使他们进入清晰的屏幕,这显然是此setContentView(R.layout.activity)事件,已将其添加到后退堆栈中,而我将返回它。因此,我希望该事件,Activity的开始及其不可见的布局不添加到后台堆栈中。当用户在FragmentA上并按“后退”按钮时,我希望活动刚刚结束。我已经尝试了很多其他方法来消除我的后堆栈中的setContentView(R.layout.activity)事务,但没有任何效果。我认为对此有一个简单的解决方案,例如设置FLAG,但这使我难以理解。过去,我已经重写了OnBackPress方法,并且我认为这会起作用,但是我仍然好奇是否有一种更简便的方法可以将第一个(Activity)项目从我的后栈中弹出,而无需我重写OnBackPressed。

我想念什么?

android android-fragments kotlin back-stack fragment-backstack
1个回答
2
投票

我认为您不需要添加带有片段A的堆栈。在片段A中,用户向后按下活动将完成!

© www.soinside.com 2019 - 2024. All rights reserved.