Skip to content

Commit 394b40a

Browse files
feat(*): 去掉kotlin-android-extensions插件,升级Activity和Dialog为ViewBinding
1 parent 04fb201 commit 394b40a

File tree

14 files changed

+112
-236
lines changed

14 files changed

+112
-236
lines changed

app/build.gradle

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
apply plugin: 'com.android.application'
22
apply plugin: 'kotlin-android'
3-
//没有此插件,Kotlin无法反射控件ID
4-
apply plugin: 'kotlin-android-extensions'
53

64
android {
75
compileSdkVersion 33
@@ -35,13 +33,4 @@ dependencies {
3533
implementation 'androidx.core:core-ktx:1.9.0'
3634
implementation 'androidx.appcompat:appcompat:1.6.1'
3735
implementation 'androidx.recyclerview:recyclerview:1.3.0'
38-
//Google官方授权库
39-
implementation 'pub.devrel:easypermissions:3.0.0'
40-
implementation 'com.google.code.gson:gson:2.10.1'
41-
//沉浸式状态栏。基础依赖包,必须要依赖
42-
implementation 'com.gyf.immersionbar:immersionbar:3.0.0'
43-
//图片选择框架
44-
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
45-
//图片加载库
46-
implementation 'com.github.bumptech.glide:glide:4.9.0'
4736
}

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

Lines changed: 0 additions & 89 deletions
This file was deleted.

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

Lines changed: 16 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ import android.os.Bundle
44
import androidx.appcompat.app.AppCompatActivity
55
import com.pengxh.kt.lib.databinding.ActivityMainBinding
66
import com.pengxh.kt.lite.extensions.binding
7-
import com.pengxh.kt.lite.extensions.show
8-
import com.pengxh.kt.lite.widget.SteeringWheelView
7+
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
98

109
class MainActivity : AppCompatActivity() {
1110

@@ -15,47 +14,25 @@ class MainActivity : AppCompatActivity() {
1514

1615
override fun onCreate(savedInstanceState: Bundle?) {
1716
super.onCreate(savedInstanceState)
18-
binding.steeringWheelView.setOnWheelTouchListener(object :
19-
SteeringWheelView.OnWheelTouchListener {
20-
override fun onCenterClicked() {
21-
"onCenterClicked".show(context)
22-
}
23-
24-
override fun onLeftTurn() {
25-
"onLeftTurn".show(context)
26-
}
27-
28-
override fun onTopTurn() {
29-
"onTopTurn".show(context)
30-
}
31-
32-
override fun onRightTurn() {
33-
"onRightTurn".show(context)
34-
}
35-
36-
override fun onBottomTurn() {
37-
"onBottomTurn".show(context)
38-
}
39-
40-
override fun onActionTurnUp(dir: SteeringWheelView.Direction) {
41-
when (dir) {
42-
SteeringWheelView.Direction.LEFT -> {
43-
"LEFT onActionTurnUp".show(context)
44-
}
4517

46-
SteeringWheelView.Direction.TOP -> {
47-
"TOP onActionTurnUp".show(context)
48-
}
18+
binding.showDialogButton.setOnClickListener {
19+
AlertControlDialog.Builder()
20+
.setContext(this)
21+
.setTitle("111")
22+
.setMessage("1111")
23+
.setNegativeButton("111")
24+
.setPositiveButton("1111")
25+
.setOnDialogButtonClickListener(object :
26+
AlertControlDialog.OnDialogButtonClickListener {
27+
override fun onConfirmClick() {
4928

50-
SteeringWheelView.Direction.RIGHT -> {
51-
"RIGHT onActionTurnUp".show(context)
5229
}
5330

54-
SteeringWheelView.Direction.BOTTOM -> {
55-
"BOTTOM onActionTurnUp".show(context)
31+
override fun onCancelClick() {
32+
5633
}
57-
}
58-
}
59-
})
34+
})
35+
.build().show()
36+
}
6037
}
6138
}
Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3-
xmlns:app="http://schemas.android.com/apk/res-auto"
43
android:layout_width="match_parent"
54
android:layout_height="match_parent"
5+
android:gravity="center"
66
android:orientation="vertical">
77

8-
<com.pengxh.kt.lite.widget.SteeringWheelView
9-
android:id="@+id/steeringWheelView"
10-
android:layout_width="match_parent"
11-
android:layout_height="match_parent"
12-
android:background="@color/white"
13-
android:gravity="center"
14-
app:ctrl_backgroundColor="@color/white"
15-
app:ctrl_borderColor="#64BFEB"
16-
app:ctrl_borderStroke="@dimen/dp_5"
17-
app:ctrl_diameter="@dimen/dp_200" />
8+
<Button
9+
android:id="@+id/showDialogButton"
10+
android:layout_width="wrap_content"
11+
android:layout_height="wrap_content"
12+
android:text="显示弹窗" />
1813
</LinearLayout>
Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,9 @@
11
package com.pengxh.kt.lite.extensions
22

3-
import android.view.LayoutInflater
43
import androidx.activity.ComponentActivity
54
import androidx.viewbinding.ViewBinding
65

76
inline fun <reified VB : ViewBinding> ComponentActivity.binding() =
87
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-
}
8+
inflateBinding<VB>(layoutInflater).also { setContentView(it.root) }
9+
}

lite/src/main/java/com/pengxh/kt/lite/extensions/Dialog.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.graphics.Color
55
import android.graphics.drawable.ColorDrawable
66
import android.view.WindowManager
77
import androidx.annotation.StyleRes
8+
import androidx.viewbinding.ViewBinding
89

910
fun Dialog.initDialogLayoutParams(ratio: Float) {
1011
val window = this.window ?: return
@@ -27,4 +28,8 @@ fun Dialog.resetParams(gravity: Int, @StyleRes resId: Int, ratio: Double) {
2728
params.width = ((this.context.getScreenWidth() * ratio).toInt())
2829
params.height = WindowManager.LayoutParams.WRAP_CONTENT
2930
window.attributes = params
31+
}
32+
33+
inline fun <reified VB : ViewBinding> Dialog.binding() = lazy(LazyThreadSafetyMode.NONE) {
34+
inflateBinding<VB>(layoutInflater).also { setContentView(it.root) }
3035
}

lite/src/main/java/com/pengxh/kt/lite/extensions/Fragment.kt

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.pengxh.kt.lite.extensions
22

33
import android.os.Handler
44
import android.os.Looper
5-
import android.view.View
5+
import android.view.LayoutInflater
66
import androidx.fragment.app.Fragment
77
import androidx.lifecycle.DefaultLifecycleObserver
88
import androidx.lifecycle.LifecycleOwner
@@ -15,22 +15,23 @@ inline fun <reified VB : ViewBinding> Fragment.bindView() = FragmentBindingDeleg
1515
class FragmentBindingDelegate<VB : ViewBinding>(private val clazz: Class<VB>) :
1616
ReadOnlyProperty<Fragment, VB> {
1717

18-
private var isInitialized = false
19-
private var _binding: VB? = null
20-
private val binding: VB get() = _binding!!
18+
private var binding: VB? = null
2119
private val handler by lazy { Handler(Looper.getMainLooper()) }
2220

2321
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
22+
if (binding == null) {
23+
try {
24+
binding = clazz.getMethod("inflate", LayoutInflater::class.java)
25+
.invoke(null, thisRef.layoutInflater) as VB
26+
} catch (e: IllegalStateException) {
27+
throw IllegalStateException("The property of ${property.name} has been destroyed.")
28+
}
3329
}
34-
return _binding!!
30+
thisRef.viewLifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver {
31+
override fun onDestroy(owner: LifecycleOwner) {
32+
handler.post { binding = null }
33+
}
34+
})
35+
return binding!!
3536
}
3637
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.pengxh.kt.lite.extensions
2+
3+
import android.view.LayoutInflater
4+
import androidx.viewbinding.ViewBinding
5+
6+
inline fun <reified VB : ViewBinding> inflateBinding(layoutInflater: LayoutInflater): VB {
7+
return VB::class.java
8+
.getMethod("inflate", LayoutInflater::class.java)
9+
.invoke(null, layoutInflater) as VB
10+
}

lite/src/main/java/com/pengxh/kt/lite/widget/dialog/AlertControlDialog.kt

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ package com.pengxh.kt.lite.widget.dialog
33
import android.app.Dialog
44
import android.content.Context
55
import android.os.Bundle
6-
import android.widget.Button
7-
import android.widget.TextView
86
import com.pengxh.kt.lite.R
7+
import com.pengxh.kt.lite.databinding.DialogAlertBinding
8+
import com.pengxh.kt.lite.extensions.binding
99
import com.pengxh.kt.lite.extensions.initDialogLayoutParams
1010

1111
/**
@@ -63,6 +63,8 @@ class AlertControlDialog private constructor(builder: Builder) : Dialog(
6363
}
6464
}
6565

66+
private val binding: DialogAlertBinding by binding()
67+
6668
override fun onCreate(savedInstanceState: Bundle?) {
6769
super.onCreate(savedInstanceState)
6870
this.initDialogLayoutParams(0.8f)
@@ -73,27 +75,23 @@ class AlertControlDialog private constructor(builder: Builder) : Dialog(
7375
}
7476

7577
private fun initView() {
76-
val dialogTitleView: TextView = findViewById(R.id.dialogTitleView)
77-
val dialogMessageView: TextView = findViewById(R.id.dialogMessageView)
78-
val dialogCancelButton = findViewById<Button>(R.id.dialogCancelButton)
79-
val dialogConfirmButton = findViewById<Button>(R.id.dialogConfirmButton)
8078
if (title.isNotBlank()) {
81-
dialogTitleView.text = title
79+
binding.dialogTitleView.text = title
8280
}
8381
if (message.isNotBlank()) {
84-
dialogMessageView.text = message
82+
binding.dialogMessageView.text = message
8583
}
8684
if (negativeBtn.isNotBlank()) {
87-
dialogCancelButton.text = negativeBtn
85+
binding.dialogCancelButton.text = negativeBtn
8886
}
89-
dialogCancelButton.setOnClickListener {
87+
binding.dialogCancelButton.setOnClickListener {
9088
listener.onCancelClick()
9189
dismiss()
9290
}
9391
if (positiveBtn.isNotBlank()) {
94-
dialogConfirmButton.text = positiveBtn
92+
binding.dialogConfirmButton.text = positiveBtn
9593
}
96-
dialogConfirmButton.setOnClickListener {
94+
binding.dialogConfirmButton.setOnClickListener {
9795
listener.onConfirmClick()
9896
dismiss()
9997
}

0 commit comments

Comments
 (0)