Skip to content

Commit 04fb201

Browse files
feat(*): Activity和Fragment内联函数-1
1 parent 56f10f2 commit 04fb201

File tree

5 files changed

+74
-19
lines changed

5 files changed

+74
-19
lines changed

app/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ android {
2424
sourceCompatibility JavaVersion.VERSION_1_8
2525
targetCompatibility JavaVersion.VERSION_1_8
2626
}
27+
28+
viewBinding {
29+
enabled true
30+
}
2731
}
2832

2933
dependencies {

app/src/main/java/com/pengxh/kt/lib/MainActivity.kt

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,22 @@
11
package com.pengxh.kt.lib
22

33
import android.os.Bundle
4-
import com.pengxh.kt.lite.base.KotlinBaseActivity
4+
import androidx.appcompat.app.AppCompatActivity
5+
import com.pengxh.kt.lib.databinding.ActivityMainBinding
6+
import com.pengxh.kt.lite.extensions.binding
57
import com.pengxh.kt.lite.extensions.show
68
import com.pengxh.kt.lite.widget.SteeringWheelView
7-
import kotlinx.android.synthetic.main.activity_main.*
89

9-
class MainActivity : KotlinBaseActivity() {
10+
class MainActivity : AppCompatActivity() {
1011

1112
private val kTag = "MainActivity"
1213
private val context = this@MainActivity
14+
private val binding: ActivityMainBinding by binding()
1315

14-
override fun initLayoutView(): Int = R.layout.activity_main
15-
16-
override fun setupTopBarLayout() {
17-
18-
}
19-
20-
override fun observeRequestState() {
21-
22-
}
23-
24-
override fun initData(savedInstanceState: Bundle?) {
25-
26-
}
27-
28-
override fun initEvent() {
29-
steeringWheelView.setOnWheelTouchListener(object : SteeringWheelView.OnWheelTouchListener {
16+
override fun onCreate(savedInstanceState: Bundle?) {
17+
super.onCreate(savedInstanceState)
18+
binding.steeringWheelView.setOnWheelTouchListener(object :
19+
SteeringWheelView.OnWheelTouchListener {
3020
override fun onCenterClicked() {
3121
"onCenterClicked".show(context)
3222
}
@@ -52,12 +42,15 @@ class MainActivity : KotlinBaseActivity() {
5242
SteeringWheelView.Direction.LEFT -> {
5343
"LEFT onActionTurnUp".show(context)
5444
}
45+
5546
SteeringWheelView.Direction.TOP -> {
5647
"TOP onActionTurnUp".show(context)
5748
}
49+
5850
SteeringWheelView.Direction.RIGHT -> {
5951
"RIGHT onActionTurnUp".show(context)
6052
}
53+
6154
SteeringWheelView.Direction.BOTTOM -> {
6255
"BOTTOM onActionTurnUp".show(context)
6356
}

lite/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ android {
2626
coroutines 'enable'
2727
}
2828
}
29+
30+
viewBinding {
31+
enabled true
32+
}
2933
}
3034

3135
dependencies {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.pengxh.kt.lite.extensions
2+
3+
import android.view.LayoutInflater
4+
import androidx.activity.ComponentActivity
5+
import androidx.viewbinding.ViewBinding
6+
7+
inline fun <reified VB : ViewBinding> ComponentActivity.binding() =
8+
lazy(LazyThreadSafetyMode.NONE) {
9+
inflateBinding<VB>(layoutInflater).also {
10+
setContentView(it.root)
11+
}
12+
}
13+
14+
inline fun <reified VB : ViewBinding> inflateBinding(layoutInflater: LayoutInflater): VB {
15+
return VB::class.java
16+
.getMethod("inflate", LayoutInflater::class.java)
17+
.invoke(null, layoutInflater) as VB
18+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.pengxh.kt.lite.extensions
2+
3+
import android.os.Handler
4+
import android.os.Looper
5+
import android.view.View
6+
import androidx.fragment.app.Fragment
7+
import androidx.lifecycle.DefaultLifecycleObserver
8+
import androidx.lifecycle.LifecycleOwner
9+
import androidx.viewbinding.ViewBinding
10+
import kotlin.properties.ReadOnlyProperty
11+
import kotlin.reflect.KProperty
12+
13+
inline fun <reified VB : ViewBinding> Fragment.bindView() = FragmentBindingDelegate(VB::class.java)
14+
15+
class FragmentBindingDelegate<VB : ViewBinding>(private val clazz: Class<VB>) :
16+
ReadOnlyProperty<Fragment, VB> {
17+
18+
private var isInitialized = false
19+
private var _binding: VB? = null
20+
private val binding: VB get() = _binding!!
21+
private val handler by lazy { Handler(Looper.getMainLooper()) }
22+
23+
override fun getValue(thisRef: Fragment, property: KProperty<*>): VB {
24+
if (!isInitialized) {
25+
thisRef.viewLifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver {
26+
override fun onDestroy(owner: LifecycleOwner) {
27+
handler.post { _binding = null }
28+
}
29+
})
30+
_binding = clazz.getMethod("bind", View::class.java)
31+
.invoke(null, thisRef.requireView()) as VB
32+
isInitialized = true
33+
}
34+
return _binding!!
35+
}
36+
}

0 commit comments

Comments
 (0)