首页 > 解决方案 > 从另一个 BottomSheetDialogFragment 打开另一个 BottomSheetDialogFragment

问题描述

单击视图时,我正在打开一个BottomSheetDialogFragment. 单击此片段中的视图时,我需要打开另一个BottomSheetDialogFragment.

我的适配器.kt:

class MyAdapter : RecyclerView.Adapter<MyAdapter.ViewHolder>() {
  ...
  var fManager: FragmentManager? = null

  inner class ViewHolder(private val binding: ViewDataBinding) : RecyclerView.ViewHolder(binding.root) {

    init {
      binding.root.setOnClickListener {
        fManager?.let { manager ->
          Dialog1().apply {
            show(manager, tag)
          }
        }
      }
    }

    ...
  }

  ...
}

这是我的 Dialog1.kt:

class Dialog1 : BottomSheetDialogFragment() {
  private lateinit var binding: Dialog1Binding

  override fun onCreateView(...) {...}

  override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    binding.primaryButton.setOnClickListener {
      Dialog2().apply {
        show(childFragmentManager, tag)
      }
      dismiss()
    }
  }
}

在 RecyclerView 上,Dialog1 按预期打开,但是当我尝试打开 Dialog2 时,出现此错误:

Fragment Dialog2... 尚未附加。

我该如何解决?

标签: androidkotlinandroid-fragments

解决方案


所以经过大量的试验和错误后,我发现解决方案是当我编写这样的代码时:

binding.primaryButton.setOnClickListener {
  Dialog2().let {
    it.show(parentFragmentManager, it.tag)
  }
  dismiss()
}

但是apply我最初使用的块有什么问题?


推荐阅读