代码之家  ›  专栏  ›  技术社区  ›  Mohammad Javad Habibpour

为什么在这个viewBinding示例中使用get()?

  •  0
  • Mohammad Javad Habibpour  · 技术社区  · 2 年前

    我想知道为什么“private val binding get()=_binding!!”这里用的是什么?

     private var _binding: ResultProfileBinding? = null
    private val binding get() = _binding!!
    
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        _binding = ResultProfileBinding.inflate(inflater, container, false)
        val view = binding.root
        return view
    }
    
    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   CommonsWare    2 年前

    我猜你是从 this page in the documentation .

    他们的目标是给你一种进入 _binding 价值,而无需处理以下事实: _装订 可以是 null .在他们的例子中,你没有包括的部分,他们有一个评论 binding 这就指出,它只能用于 onCreateView() onDestroyView() . 如果 在代码的一部分中,您可以 保证 您的代码将在这两个回调之间执行,您可以引用 结合 ,它将返回 _装订 被迫成为一个不- 无效的 类型( ResultProfileBinding 而不是 ResultProfileBinding? ).

    然而,如果你弄错了,你试着引用 结合 之前 onCreateView() 还是之后 onDestroyView() ,你会撞上 NullPointerException .

    就我个人而言,我会避免这种做法。