今天在開發(fā)中需要自定義一個(gè)ViewGroup,用來封裝一個(gè)模塊,但是在使用databinding的時(shí)候遇到了點(diǎn)問題,因此記錄一下.
我們在平時(shí)開發(fā)中使用databinding的時(shí)候大部分都是在Activity或者fragment中,通過在Activity中調(diào)用
DataBindingUtil.setContentView(Activity activity, int layoutId)
或者fragment中調(diào)用
DataBindingUtil.inflate(LayoutInflater inflater, int layoutId,@Nullable ViewGroup parent, boolean attachToParent);
筑悴,但是自定義ViewGroup中如何使用呢?
當(dāng)我在自定義ConstraintLayout中使用DataBinding的時(shí)候,發(fā)現(xiàn)不能使用setContentView()方法,那好吧我使用inflate總可以了吧,但是用了inflate之后卻發(fā)現(xiàn)沒有卵用,
mBinding = DataBindingUtil.inflate(
mLayoutInflater,
R.layout.lm_condition_holder,
this,
false
)
所以自定義ViewGroup壓根不吃這套.
好,那就使用DatabindingUtil.bind(@NonNull View root)方法吧
var view = inflate(context, R.layout.lm_condition_holder, this@ConditionHolderView)
mBinding = DataBindingUtil.bind(view)
感覺這次穩(wěn)了,但一運(yùn)行后就發(fā)現(xiàn)又他媽的打臉了 意思是沒有綁定上view,好吧goooooogle...
發(fā)現(xiàn)是在bind的時(shí)候需要設(shè)置tag,原因如下
到這里原因和解決方案就都有了,只需給View設(shè)置相應(yīng)的tag就可以了.
var view = inflate(context, R.layout.lm_condition_holder, this@ConditionHolderView)
view.tag = "layout/lm_condition_holder_0"
mBinding = DataBindingUtil.bind(view)
再次運(yùn)行程序就不會有問題了阁吝。希望對你有幫助。