美文网首页
ViewBinding在Fragment中的使用

ViewBinding在Fragment中的使用

作者: 小院里栽棵树 | 来源:发表于2020-09-08 18:51 被阅读0次

    如需设置绑定类的实例以供 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中的使用

          本文链接:https://www.haomeiwen.com/subject/mvejektx.html