Kotlin之MVVM架构设计

MVVM简介

MVVM分为Model、View、ViewModel,它们的作用分别为:

    Model:简称数据模型,包括从服务端获取的json数据,bean,或者从本地获取的数据等等;
    View:UI视图,负责数据的显示(activity,fragment,控件view等等);
    ViewModel:就是与界面(view)对应的Model,View与Model通过ViewModel实现数据的双向绑定。进行数据的绑定和逻辑的代码的实现

MVVM 的优点

    主要目的是分离视图(View)和模型(Model)
    降低代码耦合,提高视图或者逻辑的重用性。
    提高了模块的可测试性

ViewModel: 负责管理数据的抽象类,通过ViewBinding 中的setVariable 方法绑定绑定到View层 进行页面更新。
ViewModel 的生命周期会从创建绑定到Activity/Fragment 中开始 一直到Activity/Fragment 的onDestroy 结束,所以,不需要担心数据在
使用过程中丢失。

Model: 负责业务逻辑处理,如网络请求、数据库、耗时等操作,通常model 层会和ViewModel 使用同一个类进行封装处理,这样的好处在与,当model中的数据处理完毕拿到结果时,可以通知ViewModel 中需要更新的变量进行更新,再者ViewModel 会通知View 刷新更改页面的值。

View: 负责页面展示,在Activity\Fragment 创建时,通过binding.setVariable()的方式 将ViewModel 绑定到页面布局中。从而打到双向绑定的效果。

导入相关包以及gradle 配置

    1、kotlin 和viewmodel 相关

    api 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0' //viewmodel
    api 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.0'
    api 'androidx.appcompat:appcompat:1.6.0-alpha05'
    api 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1' //协程
    api 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
    api 'androidx.core:core-ktx:1.8.0' //kt

    api 'com.trello.rxlifecycle2:rxlifecycle-components:2.2.2'//rxlifecycler

    1

    2、子目录下的build.gradle中配置,以下不配置的话,kotlin 会报错。

plugins {
    id 'org.jetbrains.kotlin.android'
}

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

kapt {
    generateStubs = true
}

//开启databinding
android{
  buildFeatures{
        dataBinding = true
    }
      }

    3、根目录build.gradle 配置

   ext.kotlin_version ='1.7.0'
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21"

    }
    plugins {
    id 'com.android.application' version '7.1.3' apply false
    id 'com.android.library' version '7.1.3' apply false
    id 'org.jetbrains.kotlin.android' version '1.6.21' apply false
//    id 'org.jetbrains.kotlin:kotlin-gradle-plugin' version '1.7.0' apply false
}

 

    4、gradle.properties 中配置

android.useAndroidX=true
kotlin.code.style=official
android.enableJetifier=true//表示Android插件会通过重写其二进制文件来自动迁移现有的第三方库,以使用AndroidX依赖项;未设置时默认为false;
//必要配置项enableJetifier

base 封装

    1、先看看大致也结构:
    在这里插入图片描述

BaseActivity\BaseFragment代表View层,也就是直观看到界面组件

BaseViewModel Model层和ViewModel 的组成

IBaseViewModel 实现LifecycleObserver的一个自定义接口,让BaseViewModel 同样能感知组件的生命周期,方便我们在生命周期中处理一下逻辑。

    2、封装
    BaseActivity


package com.kt.ktmvvm.basic

import android.content.Intent
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.kt.ktmvvm.basic.BaseViewModel.Companion.ParameterField.BUNDLE
import com.kt.ktmvvm.basic.BaseViewModel.Companion.ParameterField.CLASS
import com.kt.ktmvvm.basic.BaseViewModel.Companion.ParameterField.REQUEST
import com.trello.rxlifecycle2.components.support.RxAppCompatActivity
import java.lang.reflect.ParameterizedType

abstract class BaseActivity<V : ViewDataBinding, VM : BaseViewModel> : RxAppCompatActivity(),
    IBaseView {

    open var binding: V? = null
    open var viewModel: VM? = null
    open var viewModelId = 0


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        initViewDataBinding(savedInstanceState)
        //页面接受的参数方法
        initParam()
        //私有的ViewModel与View的契约事件回调逻辑
        registerUIChangeLiveDataCallBack()
        //页面事件监听的方法,一般用于ViewModel层转到View层的事件注册
        initViewObservable()
    }


    private fun registerUIChangeLiveDataCallBack() {

        //跳入新页面
        viewModel?.getUC()?.getStartActivityEvent()?.observe(this) { params ->

            params?.let {
                val clz = params[CLASS] as Class<*>?
                val intent = Intent(this@BaseActivity, clz)
//            intent.addFlags(Intent.FLAG_ACTIV

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟、。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值