抽模块的回调处理
1. 创建回调接口 (core-ui 模块)
文件位置: core-ui/../NavigationCallback.kt
// 页面跳转回调
interface NavigationCallback {
fun navigateToSuccess()
fun navigateToSuccessWithOrder(orderData: Any?)
}
// 应用状态管理
interface AppStateManager {
fun getTimeoutSecond(): Int
fun isFormSubmitted(): Boolean
fun setFormSubmitted(submitted: Boolean)
fun getShrimpChannelConcurrency(): List<Int>?
}
// 回调管理器
object CallbackManager {
private var navigationCallback: NavigationCallback? = null
private var appStateManager: AppStateManager? = null
fun setNavigationCallback(callback: NavigationCallback)
fun getNavigationCallback(): NavigationCallback?
fun setAppStateManager(manager: AppStateManager)
fun getAppStateManager(): AppStateManager?
}
2. 创建接口实现 (app 模块)
文件位置: app/../AppCallbackImpl.kt
// 导航回调实现
class AppNavigationCallback(private val activity: Activity) : NavigationCallback {
override fun navigateToSuccess() {
MyApplication.isForm = true
activity.startActivity(Intent(activity, WmSuccessActivity::class.java))
activity.setResult(AppCompatActivity.RESULT_OK)
activity.finish()
}
override fun navigateToSuccessWithOrder(orderData: Any?) {
MyApplication.isForm = true
val intent = Intent(activity, WmSuccessActivity::class.java)
intent.putExtra("orderData", orderData)
activity.startActivity(intent)
activity.setResult(AppCompatActivity.RESULT_OK)
activity.finish()
}
}
// 应用状态管理实现
class AppStateManagerImpl : AppStateManager {
override fun getTimeoutSecond(): Int = MyApplication.timeout_second
override fun isFormSubmitted(): Boolean = MyApplication.isForm
override fun setFormSubmitted(submitted: Boolean) {
MyApplication.isForm = submitted
}
override fun getShrimpChannelConcurrency(): List<Int>? {
return MyApplication.shrimp_channel_concurrency
}
}
3. 修改 (core-ui 模块)
修改前:
var OVERTIME: Long = (MyApplication.timeout_second * 1000).toLong()
fun goSuccessActivity(context: Activity) {
MyApplication.isForm = true
context.startActivity(Intent(context, WmSuccessActivity::class.java))
context.setResult(AppCompatActivity.RESULT_OK)
context.finish()
}
val codeList = MyApplication.shrimp_channel_concurrency
修改后:
var OVERTIME: Long = ((CallbackManager.getAppStateManager()?.getTimeoutSecond() ?: 10) * 1000).toLong()
fun goSuccessActivity(context: Activity) {
CallbackManager.getAppStateManager()?.setFormSubmitted(true)
CallbackManager.getNavigationCallback()?.navigateToSuccess()
}
val codeList = CallbackManager.getAppStateManager()?.getShrimpChannelConcurrency()
📝 使用方法
Activity 中初始化回调
class QuanLiuChengFormLoanActivity : CommonActivity<UserViewModel, ZxdFormOneLayoutBinding>() {
override fun init() {
// 1. 设置回调(必须在使用 ViewModel 之前)
CallbackManager.setNavigationCallback(AppNavigationCallback(this))
CallbackManager.setAppStateManager(AppStateManagerImpl())
// 2. 其他初始化代码
}
override fun onDestroy() {
super.onDestroy()
// 清理回调(可选)
CallbackManager.setNavigationCallback(null)
CallbackManager.setAppStateManager(null)
}
}
在其他使用 QuanLiuChengFormViewModel 的地方
任何使用 QuanLiuChengFormViewModel 的 Activity 都需要设置回调:
class SomeActivity : CommonActivity<UserViewModel, SomeBinding>() {
private val formViewModel by lazy { QuanLiuChengFormViewModel() }
override fun init() {
// 设置回调
CallbackManager.setNavigationCallback(AppNavigationCallback(this))
CallbackManager.setAppStateManager(AppStateManagerImpl())
// 使用 ViewModel
formViewModel.someMethod(...)
}
}
🎯 优势
1. 解耦
- ✅ core-ui 模块不再依赖 app 模块
- ✅ 可以在不同的 app 中复用 core-ui
2. 灵活性
- ✅ 可以在不同的 app 中提供不同的实现
- ✅ 易于测试(可以提供 Mock 实现)
3. 可维护性
- ✅ 职责清晰,接口定义明确
- ✅ 修改跳转逻辑只需修改实现类