一、简介
1、定义
MVVM 模式(Model--View--ViewModel 模式)
Model:模型层,负责处理数据的加载或存储。与MVP中的M一样。
View:视图层,对应于Activity,XML,View,负责界面数据的展示,与用户进行交互。与MVP中的V一样。
ViewModel:视图模型,负责完成View于Model间的绑定和交互,Model或者View更改时,实时刷新对方,负责业务逻辑。
2、详情
和 MVP 模式相比,MVVM 模式用ViewModel 替换了 Presenter ,其他层基本上与 MVP 模式一致,ViewModel 可以理解成是 View 的数据模型和 Presenter 的合体。
MVVM 采用双向绑定(data-binding):View 的变动,自动反映在 ViewModel,反之亦然,
这种模式实际上是框架替应用开发者做了一些工作(相当于 ViewModel 类是由库帮我们生
成的),开发者只需要较少的代码就能实现比较复杂的交互。
3、各模块关系
}else{
listener.onFailed("${userName}登录失败")
}
}
//回调接口
interface ModelCallBack{
fun onSuccess(msg:String)
fun onFailed(msg:String)
}
}
View层
将根布局修改为layout,加入 Data Binding。
注意:class名为xml名去掉_后的驼峰写法,即此xml为activity_main.xml,则其类名则需要为ActivityMainBinding。两者名字必须是这个规则的写法,否则在View层进行xml绑定时会显示找不到xml文件
xmlns:app="http://schemas.android.com/apk/res-auto">
name="userViewModel"
type="yzl.swu.mvvm.viewModel.UserViewModel" />
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@={userViewModel.userName}"
android:textSize="50sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.35" />
android:id="@+id/loginBtn"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_marginTop="30dp"
android:text="登录"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
android:onClick="@{userViewModel.loginUser}"/>
build一下生成需要的类
var cpro_id = "u6885494";