@@ -4,17 +4,28 @@ import android.view.MotionEvent
4
4
import android.view.View
5
5
import android.widget.EditText
6
6
import android.widget.LinearLayout
7
+ import android.widget.TextView
7
8
import androidx.core.content.ContextCompat
8
9
import androidx.lifecycle.Lifecycle
10
+ import androidx.lifecycle.lifecycleScope
11
+ import com.hjq.toast.ToastUtils
12
+ import kotlinx.coroutines.Job
13
+ import kotlinx.coroutines.launch
9
14
import wsdydeni.library.android.base.BaseActivity
10
- import wsdydeni.library.android.base.BaseViewModel
15
+ import wsdydeni.library.android.base.BaseActivityHandler
11
16
import wsdydeni.library.android.utils.another.LogUtil
12
17
import wsdydeni.library.android.utils.density.AutoDensity
13
18
import wsdydeni.library.android.utils.display.PixelUtil
14
19
import wsdydeni.library.android.utils.immersion.getNavBarHeight
15
20
import wsdydeni.library.android.utils.immersion.getStatusBarHeight
16
21
import wsdydeni.library.android.utils.immersion.showStatusBarView
17
22
import wsdydeni.library.android.utils.keyboard.addKeyboardMonitor
23
+ import wsdydeni.library.android.utils.lifecycle.launchAndRepeatWithViewLifecycle
24
+ import wsdydeni.library.android.utils.lifecycle.repeatOnLifecycle
25
+ import wsdydeni.widget.library.base.DialogDismissEffect
26
+ import wsdydeni.widget.library.base.DialogShowEffect
27
+ import wsdydeni.widget.library.base.ToastShowEffect
28
+ import wsdydeni.widget.library.dialog.LoadingDialog
18
29
19
30
class MainActivity : BaseActivity (R .layout.activity_main) {
20
31
@@ -26,6 +37,10 @@ class MainActivity : BaseActivity(R.layout.activity_main) {
26
37
27
38
override var immersionStatus = true
28
39
40
+ private var loadingDialog : LoadingDialog ? = null
41
+
42
+ private val myHandler = BaseActivityHandlers (this )
43
+
29
44
override fun initView () {
30
45
addKeyboardMonitor { keyboardHeight, _, _ ->
31
46
if (keyboardHeight > 1000 ) {
@@ -60,6 +75,28 @@ class MainActivity : BaseActivity(R.layout.activity_main) {
60
75
}
61
76
}
62
77
showStatusBarView(findViewById(R .id.fillStatusBarView), ContextCompat .getColor(this , R .color.color_6d7174))
78
+
79
+ findViewById<TextView >(R .id.send_btn).setOnClickListener {
80
+ lifecycleScope.launch {
81
+ createLoadingDialog(job = mainViewModel.getArticle())
82
+ mainViewModel.setEffect { DialogShowEffect }
83
+ }
84
+ }
85
+ }
86
+
87
+ private fun createLoadingDialog (text : String = "加载中", isCanCancelByReturn : Boolean = true, job : Job ? = null) {
88
+ this .loadingDialog = LoadingDialog (this ,job)
89
+ .setLoadingText(text)
90
+ .isCanCancelByReturn(isCanCancelByReturn)
91
+ }
92
+
93
+ override fun initData () {
94
+ observeEffect()
95
+ launchAndRepeatWithViewLifecycle {
96
+ mainViewModel.articleList.collect {
97
+ mainViewModel.setEffect { ToastShowEffect (" 加载成功" ) }
98
+ }
99
+ }
63
100
}
64
101
65
102
/* *
@@ -75,7 +112,40 @@ class MainActivity : BaseActivity(R.layout.activity_main) {
75
112
return super .dispatchTouchEvent(ev)
76
113
}
77
114
78
- private fun observeEffect (viewModel : BaseViewModel ) {
79
- Lifecycle .State .STARTED
115
+ private val mainViewModel by lazy { MainViewModel () }
116
+
117
+ private fun observeEffect () {
118
+ lifecycleScope.launch {
119
+ repeatOnLifecycle(Lifecycle .State .STARTED ) {
120
+ mainViewModel.effect.collect { effect ->
121
+ when (effect) {
122
+ is DialogShowEffect -> {
123
+ if (! isDestroyed && ! isFinishing) {
124
+ myHandler.post {
125
+ if (! isDestroyed && ! isFinishing) {
126
+ loadingDialog?.let {
127
+ if (! it.isShowing) it.show()
128
+ }
129
+ }
130
+ }
131
+ }
132
+ }
133
+ is DialogDismissEffect -> {
134
+ loadingDialog?.let { dialog ->
135
+ dialog.dismissCancelJob(effect.isCancel)
136
+ loadingDialog = null
137
+ }
138
+ }
139
+ is ToastShowEffect -> {
140
+ ToastUtils .show(effect.text)
141
+ }
142
+ }
143
+ }
144
+ }
145
+ }
146
+ }
147
+
148
+ companion object {
149
+ class BaseActivityHandlers (activity : BaseActivity ) : BaseActivityHandler(activity)
80
150
}
81
151
}
0 commit comments