与普通视图不同,ViewStub开始是不可见的。当它们可见或显式inflate时,它们会inflate另一个布局来替换布局中的自身。
由于ViewStub会从视图层次结构中消失,Binding对象中的View也必然消失,以便垃圾回收对其进行回收。因为Binding类中的View都是final的,因此不能修改,所以再生成的Binding类中,框架将会创建一个ViewStubProxy对象来代理ViewStub,当在ViewStub存在时可以通过这个proxy去访问它,而在ViewStub infalte之后,通过proxy可以去访问infalte的视图层次结构。
当infalte另一个布局时,必须为新布局建立绑定。因此,ViewStubProxy必须侦听ViewStub OnInflateListener,并在需要时建立绑定。由于一次只能存在一个监听器,ViewStubProxy允许您设置一个OnInflateListener,建立绑定之后就会调用该监听器。
网友评论