You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin:不使用Navigation Component,关闭Activity后跳过BottomSheet返回原Fragment

解决方法:关闭Activity C后直接回到Fragment A

方法一:启动Activity C时立即关闭BottomSheet B

这是最直接的方案,用户进入编辑页面后,操作弹窗已无存在必要。在BottomSheetDialogFragment(B)的Edit按钮点击事件中,先关闭当前弹窗,再启动Activity C:

// BottomSheetDialogFragment B中的点击逻辑
editOption.setOnClickListener {
    // 先关闭当前BottomSheet弹窗
    dismiss()
    // 启动Activity C并传递必要参数
    val intent = Intent(requireContext(), ActivityC::class.java)
    intent.putExtra("ACCOUNT_INFO", accountData)
    startActivity(intent)
}

关闭Activity C后,宿主Activity回到前台,此时B已被关闭,自然显示Fragment A。

方法二:通过结果回调在C关闭后关闭B

若需保留B的状态(比如编辑完成后要回到弹窗继续操作),可使用Activity结果监听,在C关闭后触发B的关闭:

  1. 在BottomSheetDialogFragment(B)中注册结果监听:
private val editLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    // 无论编辑成功与否,关闭BottomSheet
    dismiss()
}

// Edit按钮点击事件
editOption.setOnClickListener {
    val intent = Intent(requireContext(), ActivityC::class.java)
    intent.putExtra("ACCOUNT_INFO", accountData)
    editLauncher.launch(intent)
}
  1. 在Activity C中完成操作后关闭自身:
// Activity C中保存编辑后的逻辑
saveBtn.setOnClickListener {
    // 执行保存操作
    finish()
}

方法三:广播通知宿主关闭B

通过广播让宿主Activity在C关闭后关闭B:

  1. 在宿主Activity中注册广播接收器:
private val closeSheetReceiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        val bottomSheet = supportFragmentManager.findFragmentByTag("BottomSheetB") as? BottomSheetDialogFragment
        bottomSheet?.dismiss()
    }
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    registerReceiver(closeSheetReceiver, IntentFilter("ACTION_CLOSE_SHEET"))
}

override fun onDestroy() {
    super.onDestroy()
    unregisterReceiver(closeSheetReceiver)
}
  1. 在Activity C关闭时发送广播:
finish()
sendBroadcast(Intent("ACTION_CLOSE_SHEET"))

总结

优先推荐方法一,逻辑简单且符合操作直觉;仅在特殊需求场景下,再考虑方法二或方法三。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:15:30