我试图在片段中理解视图绑定的实现,我发现它不同于activity。
在活动中:
private lateinit var binding: ResultProfileBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ResultProfileBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
}在片段中:
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?这行是做什么的,它的目的是什么?
private val binding get() = _binding!!发布于 2021-06-25 10:59:49
在第二个示例中,_binding属性是可以为空的,以便允许状态在“初始化”之前。然后,假设支持字段(_binding)已经初始化,binding属性有一个getter来提供方便的访问。
您引用的特定行意味着当您尝试访问binding时,它将返回_binding。
实际上,您所做的只是创建了一个lateinit属性的类比,实际上,如果您查看lateinit声明的反编译字节码,它们的数量是相同的。
然而,正如@Tenour04指出的,这里的细微区别是第二种方法允许你将支持字段设置回,而你不能用lateinit属性来做这件事。当您在片段中使用绑定时,建议将onDestroyView中的绑定设置为空,以避免内存泄漏,这就是为什么他们在片段中采用这种方法。
https://stackoverflow.com/questions/68124726
复制相似问题