ViewStub view must have a tag binding 解决

Reposted from: Jetpack DataBinding - Nuggets

View must have a tag binding error occurs when using ViewStub with ViewBinding

The reason for the error is that I used LayoutProgressBinding.bind(inflateId) to initialize my databinding, and ViewStubProxy has executed DataBindingUtil.bind when calling onInflate, and the view will automatically clear the tag after executing the bind method, so use DataBindingUtil .bind to get databindinng

 binding.viewStubExpand.setOnInflateListener { _, inflated ->

        //OK : 方式 1,直接获取了view的binding缓存(因为binding已经生成过了,在ViewStubProxy中)
        val vb1: ViewStubTipBinding? = DataBindingUtil.bind(inflated)

        //OK : 方式 2,直接获取 ViewStubProxy中的 binding缓存
//            val vb2 = binding.viewStubExpand.binding as ViewStubTipBinding

        //ERROR : 方式 3, 直接通过扩展layout的绑定类生成,因为在ViewStubProxy中已经创建过了
        //创建过的binding类会清空view对应的tag, 所以会报错(view must have a tag)
        //这种机制也保证了,binding类的单例特性
//            val vb3 = ViewStubTipBinding.bind(inflated)

        vb1?.tipModel = TipViewModel("666")
    }

作者:科技猿人
链接:https://juejin.cn/post/6971772728588107812
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Guess you like

Origin blog.csdn.net/mldxs/article/details/128103461