【问题标题】:Android-Kotlin- button acting as back buttonAndroid-Kotlin- 按钮作为后退按钮
【发布时间】:2022-01-06 18:30:31
【问题描述】:

如何使屏幕上的按钮以与物理/虚拟后退按钮相同的方式起作用? Kotlin,请不要使用 Java。我知道这只是复制一个函数,但这正是我的目标。
我正在尝试为 Android 应用程序 (Android Studio) 学习 Kotlin 的基础知识,以满足我的好奇心,并可能为神经退行性疾病患者做一些有益的事情。感谢 Internet 的帮助,我得到了一个标准的 goto new activity 按钮(下面的示例),但我被困在那个按钮上。

val button: Button = findViewById(R.id.button_main_doccont)
    button.setOnClickListener {
        val intent = Intent(this, page_contact_doctor::class.java)
        startActivity(intent)
    }

【问题讨论】:

  • 你不能直接在Activity 上拨打onBackPressed() 吗?

标签: android kotlin button back-button back


【解决方案1】:

你不能直接在Activity 上拨打onBackPressed() 吗?这与按下物理 BACK 按钮的作用完全相同。

【讨论】:

  • 非常感谢大卫,我粘贴了活动,现在可以使用了。这很简单,但我完全没有想到。 val buttonbdoctor: Button = findViewById(R.id.back_page_contact_doctor) buttonbdoctor.setOnClickListener { val intent = Intent(this, main_hub_page::class.java) onBackPressed() }
  • 你也不需要val intent = Intent(this, ...)
  • 如果我的回答有用,您可以点击答案旁边的绿色复选标记接受它。这将从未决问题列表中删除此问题,并可能在将来帮助遇到类似问题的其他人。
【解决方案2】:

您可以在NavController 上致电.navigateUp().popBackStack()

如果您没有对 NavController 的引用,则可以获取它。

在 Kotlin 中,您可以在 Fragment 中简单地做

button.setOnClickListener {
   findNavController().navigateUp()
   // or
   findNavController().popBackStack()
}

否则,您需要引用您从中导航的片段

button.setOnClickListener {
    fragment.findNavController().navigateUp()
    // or
    fragment.findNavController().popBackStack()
}

请注意,popBackStacknavigateUp 具有不同的语义。

popBackStack的文档

尝试弹出控制器的回栈。类似于当关联的导航主机获得焦点时,用户按下系统返回按钮。

返回: 如果堆栈被弹出并且用户已经导航到另一个目的地,则为 true,否则为 false

navigateUp 的文档

尝试在导航层次结构中向上导航。适用于当用户在应用程序 UI 的左上角(或开始)按下带有向左(或开始)箭头的“向上”按钮时。 当用户没有从应用程序自己的任务到达当前目的地时,Up 的预期行为与 Back 不同。例如如果用户正在查看当前应用程序中的文档或链接,该活动托管在另一个应用程序的任务上,用户单击了该链接。在这种情况下,当前活动(由用于创建此 NavController 的上下文确定)将完成,并且用户将在其自己的任务中被带到此应用中的适当目的地。

返回: 如果导航成功则返回 true,否则返回 false

【讨论】:

  • Ma3x,很抱歉,您的解决方案对我不起作用——无论我在哪里插入任何选项,android studio 都会不断抛出各种错误。 +另一个答案解决了我的问题。并感谢您的解释。
  • @ZupChi 不用担心,如果您没有使用NavController,那么无论如何其他答案都是正确的。