ViewBinding在Fragment中的使用

如需设置绑定类的实例以供 Fragment 使用,请在 Fragment 的 onCreateView() 方法中执行以下步骤:

  1. 调用生成的绑定类中包含的静态 inflate() 方法。此操作会创建该绑定类的实例以供 Fragment 使用。
  2. 通过调用 getRoot() 方法或使用 Kotlin 属性语法获取对根视图的引用。
  3. 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

参考链接

你可能感兴趣的:(ViewBinding在Fragment中的使用)