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

标签 android-fragments kotlin onbackpressed

在我的程序中,我有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/

相关文章:

java - 如何在 bottomsheetdialog 显示时退出应用程序

android - 手机后退按钮按下只有在点击 3-5 次后才有反应?

android - 完成主要 Activity 导致 Android 应用程序重新启动

java - 有没有办法在 Android 中打开 Wifi Activity 并获得 Android 中成功连接的结果

android - fragment 与其他 fragment 重叠

android - Kotlin Android Studio 警告 "Do not concatenate text displayed with setText. Use resource string with placeholders."

Gradle 找不到插件 : org. jetbrains.kotlin.jvm 和 kotlin2js

android - 跳过 fragment onBackPressed(添加/隐藏)

android - 全屏 DialogFragment 关闭 Activity

java - Android Studio - fragment 按钮 Action