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 进行授权