Kotlin MVVM的介绍和使用

MVVM简介

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

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

MVVM 的优点

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

下面引用一个自己写的模仿登录demo,来让大家体验一下MVVM,先来张效果图:

在这里插入图片描述
注意:
1、在guidle里添加databinding

dataBinding {
        enabled = true
    }

在这里插入图片描述
2、在布局里面要使用 标签

代码

MainActivity

class MainActivity : AppCompatActivity(), IBaseView {
    lateinit var mPersonVM: LoginViewModel
    var mBinding: ActivityMainBinding? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)

        mPersonVM = LoginViewModel(this)

        bt_login.setOnClickListener {
            mPersonVM.getFristData(et_account.text.toString(), et_password.text.toString())
        }

    }

    override fun setData(personBean: PersonBean) {
        mBinding?.personBean = personBean//赋值之后就可以在textview中显示出来
    }
}

main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <import type="com.example.mvvmkotlin_wy.R" />

        <variable
            name="personBean"
            type="com.example.mvvmkotlin_wy.bean.PersonBean" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="帐号:1,密码:1,登录成功\n其他:登录失败"
            app:layout_constraintBottom_toTopOf="@+id/et_account"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <EditText
            android:id="@+id/et_account"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入帐号"
            app:layout_constraintBottom_toTopOf="@id/et_password"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <EditText
            android:id="@+id/et_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入密码"
            app:layout_constraintBottom_toTopOf="@id/bt_login"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/et_account" />

        <Button
            android:id="@+id/bt_login"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="登录"
            app:layout_constraintBottom_toTopOf="@id/tv_status"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/et_password" />

        <TextView
            android:id="@+id/tv_status"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@{personBean.status}"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/bt_login" />


    </androidx.constraintlayout.widget.ConstraintLayout>

</layout>

其他详细的代码可以下载demo来看:https://download.csdn.net/download/wy313622821/12822265

猜你喜欢

转载自blog.csdn.net/wy313622821/article/details/108472125