如需设置绑定类的实例以供 Fragment 使用,请在 Fragment 的 onCreateView()
方法中执行以下步骤:
- 调用生成的绑定类中包含的静态
inflate()
方法。此操作会创建该绑定类的实例以供 Fragment 使用。 - 通过调用
getRoot()
方法或使用 Kotlin 属性语法获取对根视图的引用。 - 从
onCreateView()
方法返回根视图,使其成为屏幕上的活动视图。
private var _binding: ResultProfileBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
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.name.text = viewModel.name
binding.button.setOnClickListener { viewModel.userClicked() }
注意:Fragment 的存在时间比其视图长。请务必在 Fragment 的
onDestroyView()
方法中清除对绑定类实例的所有引用。比如在viewpager
中滑动时,触发onDetach()
时,生命周期只会走到onDestroyView()
,而不会走onDestroy()
,这时,为了防止内存泄露,我们需要把binding置空。
为什么要使用binding变量去指向_binding变量,也是因为我们需要把_binding变量置空,那么_binding 就必须指定为可空类型的,如果我们不指定一个新的变量的话,每次调用就只能判断一下非空,然后在调用了,这样使用起来就会很恶心,所以这里我们使用了一个新的非空变量来断言指向_binding.
如果要使用include中的控件,则需要给include标签加上id(eg:test),调用时,使用viewbinding.test.xxx即可
viewbinding生成的文件 存放在build->generated->data_binding_base_class_source_out中
现在kotlin-android-extension(kotlin合成方法)android studio已经不建议使用,建议使用viewbinding
网友评论