首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >binding和_binding有什么区别?

binding和_binding有什么区别?
EN

Stack Overflow用户
提问于 2021-06-25 10:36:45
回答 1查看 111关注 0票数 2

我试图在片段中理解视图绑定的实现,我发现它不同于activity。

在活动中:

代码语言:javascript
复制
private lateinit var binding: ResultProfileBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ResultProfileBinding.inflate(layoutInflater)
    val view = binding.root
    setContentView(view)
}

在片段中:

代码语言:javascript
复制
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
}

现在我的问题是,为什么我们在片段中有binding_binding?这行是做什么的,它的目的是什么?

代码语言:javascript
复制
private val binding get() = _binding!!
EN

回答 1

Stack Overflow用户

发布于 2021-06-25 10:59:49

在第二个示例中,_binding属性是可以为空的,以便允许状态在“初始化”之前。然后,假设支持字段(_binding)已经初始化,binding属性有一个getter来提供方便的访问。

您引用的特定行意味着当您尝试访问binding时,它将返回_binding

实际上,您所做的只是创建了一个lateinit属性的类比,实际上,如果您查看lateinit声明的反编译字节码,它们的数量是相同的。

然而,正如@Tenour04指出的,这里的细微区别是第二种方法允许你将支持字段设置回,而你不能用lateinit属性来做这件事。当您在片段中使用绑定时,建议将onDestroyView中的绑定设置为空,以避免内存泄漏,这就是为什么他们在片段中采用这种方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68124726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档