-
-
Notifications
You must be signed in to change notification settings - Fork 101
Expand file tree
/
Copy pathViewGroupBindings.kt
More file actions
74 lines (67 loc) · 2.6 KB
/
ViewGroupBindings.kt
File metadata and controls
74 lines (67 loc) · 2.6 KB
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
@file:JvmName("ReflectionViewGroupBindings")
package dev.androidbroadcast.vbpd
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.viewbinding.ViewBinding
/**
* Create new [ViewBinding] associated with the [ViewGroup]
*
* @param T Class of expected [ViewBinding] result class
* @param createMethod Way of creating [ViewBinding]
*
* @return [ViewBindingProperty] that holds [ViewBinding] instance
*/
@JvmName("viewBindingViewGroup")
public inline fun <reified T : ViewBinding> ViewGroup.viewBinding(
createMethod: CreateMethod = CreateMethod.BIND,
): ViewBindingProperty<ViewGroup, T> = viewBinding(T::class.java, createMethod)
/**
* Create new [ViewBinding] associated with the [ViewGroup]
*
* @param viewBindingClass Class of expected [ViewBinding] result class
* @param createMethod Way of creating [ViewBinding]
*
* @return [ViewBindingProperty] that holds [ViewBinding] instance
*/
@JvmName("viewBindingViewGroup")
@JvmOverloads
public fun <T : ViewBinding> ViewGroup.viewBinding(
viewBindingClass: Class<T>,
createMethod: CreateMethod = CreateMethod.BIND,
): ViewBindingProperty<ViewGroup, T> =
when (createMethod) {
CreateMethod.BIND ->
viewBinding { viewGroup ->
ViewBindingCache.getBind(viewBindingClass).bind(viewGroup)
}
CreateMethod.INFLATE -> viewBinding(viewBindingClass, attachToRoot = true)
}
/**
* Inflate new [ViewBinding] with the [ViewGroup][this] as a parent
*
* @param T Class of expected [ViewBinding] result class
* @param attachToRoot Whether the inflated view should be attached to the parent [ViewGroup]
*
* @return [ViewBindingProperty] that holds [ViewBinding] instance
*/
@JvmName("viewBindingViewGroupInflate")
public inline fun <reified T : ViewBinding> ViewGroup.viewBinding(attachToRoot: Boolean = false): ViewBindingProperty<ViewGroup, T> =
viewBinding(T::class.java, attachToRoot)
/**
* Inflate new [ViewBinding] with the [ViewGroup][this] as a parent
*
* @param viewBindingClass Class instance of expected [ViewBinding]
* @param attachToRoot Whether the inflated view should be attached to the parent [ViewGroup]
*
* @return [ViewBindingProperty] that holds [ViewBinding] instance
*/
@JvmName("viewBindingViewGroupInflate")
public fun <T : ViewBinding> ViewGroup.viewBinding(
viewBindingClass: Class<T>,
attachToRoot: Boolean = false,
): ViewBindingProperty<ViewGroup, T> =
viewBinding { viewGroup ->
ViewBindingCache
.getInflateWithLayoutInflater(viewBindingClass)
.inflate(LayoutInflater.from(context), viewGroup, attachToRoot)
}