文章

ViewStub

ViewStub

ViewStub

什么是 ViewStub?

ViewStub 使用?

ViewStub 和 ViewBinding

  • 封装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
fun ViewStub.isRealInflated():Boolean {  
    return  inflatedId != View.NO_ID && parent == null  
}  
  
fun ViewStub.safeInflate() {  
    if (inflatedId != View.NO_ID && parent != null) {  
        inflate()  
    }  
}  
  
inline fun <reified T : View> ViewStub.safeInflate(): T? {  
    if (inflatedId != View.NO_ID && parent != null) {  
        setTag(R.id.v_annulus,inflate())  
    }  
    val bindingTag = getTag(R.id.v_annulus)  
    return if(bindingTag is T) bindingTag else null  
}  
  
inline fun <reified T : ViewBinding> ViewStub.safeBindInflateView(bindView: (view: View) -> ViewBinding): T? {  
    if (inflatedId != View.NO_ID && parent != null) {  
        setTag(R.id.v_annulus,bindView.invoke(inflate()))  
    }  
    return getTag(R.id.v_annulus) as? T  
}  
  
fun  ViewStub.safeInflateView(): View {  
    return if (inflatedId != View.NO_ID && parent != null) {  
        val view = inflate()  
        setTag(R.id.v_annulus,view)  
        view  
    } else {  
        (getTag(R.id.v_annulus) as? View) ?: this  
    }  
}
  • 使用

ViewStub 和 DataBinding

1

AsyncViewStub

本文由作者按照 CC BY 4.0 进行授权