gpt4 book ai didi

android-fragments - 在Kotlin中..我如何从片段返回MainActivity

转载 作者:行者123 更新时间:2023-12-02 13:14:18 24 4
gpt4 key购买 nike

在我的程序中,我有MainActivity和许多片段。
我尝试以下代码从片段返回到MainActivityonBackpressed()方法

override fun onBackPressed() {

if(drawer_layout.isDrawerOpen(GravityCompat.START)) {
drawer_layout.closeDrawer(GravityCompat.START)
}
else if (fragment != null) {
val intent = Intent(applicationContext, MainActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
startActivity(intent)

}


else {
super.onBackPressed()
}
}

我的第一个问题是:

它与Drawer配合良好,还可以打开MainActivity
但是程序没有关闭..这些主要
super.onBackPressed()

不工作..为什么

我的第二个问题是:

否则如果我需要使用
getActivity().onBackpressed()

而不是旧的..

谢谢大家

最佳答案

Activity 通过onBackPressed()导航到“ Activity ”。片段必须驻留在 Activity 中(它们基本上是子 Activity ),因此通过super.onBackPressed()从片段导航到 Activity 是没有意义的。您应该从“片段”导航到“片段”,或者如果您放弃“片段”,则从“ Activity ”转向“ Activity ”。

要导航回上一个片段:

activity?.fragmentManager?.popBackStack()

导航到上一个 Activity :
activity?.finish()

要么
onBackPressed()

或者,如果您已覆盖 onBackPressed()方法,则从 Activity 中:
super.onBackPressed()

如果没有更多代码上下文,我也无法说出为什么最终的 else语句从未被调用过。您的 if else语句似乎有一个错误,因为 super.onBackPressed()将提供所需的结果,以关闭您正在进行的任何 Activity (MainActivity?)。
else  if (fragment != null) {
val intent = Intent(applicationContext, MainActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
startActivity(intent)

}

我的猜测是它与您创建MainActivity的另一个实例有关。第一次按下时,您合上了抽屉。在第二个上,您创建另一个MainActivity实例并导航到它。在第三个实例上,即使 super.onBackPressed()被调用,它也将导航回到MainActivity的第一个实例,除非您专门分配了片段,否则fragment永远不会为null,因此在第四个实例上,您将创建另一个MainActivity实例并导航至该实例。这是一个永远不会从第一个MainActivity返回的循环。

建议:但是,您正在显示MainActivity,请将其转换为Fragment并进行相应处理。另一种方法是代替创建MainActivity的另一个实例,隐藏fragmentView并显示MainActivity View 。我不建议将您的fragment设置为null,因为fragmentManager可能会抛出错误,因此,您还应该更改 if else逻辑以检查其他内容。如果您选择的路线,请说 fragment.view.visibility == View.Visible

关于android-fragments - 在Kotlin中..我如何从片段返回MainActivity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49121493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com