抽模块的回调处理

抽模块的回调处理

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. 可维护性

  • ✅ 职责清晰,接口定义明确
  • ✅ 修改跳转逻辑只需修改实现类
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容