不断学习,做更好的自己!💪
视频号CSDN简书欢迎打开微信,关注我的视频号:KevinDev点我点我 介绍 MVVMMVVM(全称Model-View-ViewModel)同 MVC 和 MVP 一样,是逻辑分层解偶的模式(如果你还不了解 MVC 和 MVP ,建议提前了解一下)。 MVVM 的三要素:
- View 层:xml、Activity、Fragment、Adapter和View等
- Model 层:数据源(本地数据和网络数据等)
- ViewModel层:View层处理数据以及逻辑处理。
MVVM 和 Data Binding 是两个不同的概念,MVVM 是一种架构模式,而 Data Binding 是一个实现数据和 UI 绑定的框架,是构建 MVVM 模式的一个工具。
学习资料: 官方文档:Data Binding Library 谷歌实验室:官方教程 官方 Demo 地址:android-databinding
实战1. 效果图 2. 在 app/build.gradle 文件添加:
android {
...
dataBinding {
enabled true
}
}
3. 构建 LoginModel LoginModel
主要负责登录逻辑的处理以及两个输入框内容改变的时候数据更新的处理。
class LoginModel constructor(name: String, pwd: String, context: Context) {
val n = ObservableField(name)
val p = ObservableField(pwd)
var context: Context = context
/**
* 用户名改变回调的函数
*/
fun onNameChanged(s: CharSequence) {
n.set(s.toString())
}
/**
* 密码改变的回调函数
*/
fun onPwdChanged(s: CharSequence, start: Int, before: Int, count: Int) {
p.set(s.toString())
}
fun login() {
if (n.get().equals(BaseConstant.USER_NAME)
&& p.get().equals(BaseConstant.USER_PWD)
) {
Toast.makeText(context, "账号密码正确", Toast.LENGTH_SHORT).show()
val intent = Intent(context, MainActivity::class.java)
context.startActivity(intent)
}
}
}
4. 创建布局文件
引入 Data Binding
之后的布局文件的使用方式会和以前的布局使用方式有很大的不同:
-
layout 用作布局的根节点,只能包裹一个
View
标签,且不能包裹merge
标签。 -
data
Data Binding
的数据,只能存在一个data
标签。 -
variable
data
中使用,数据的变量标签,type
属性指明变量的类,如com.hkt.navigationapp.model.LoginModel
。name
属性指明变量的名字,方便布局中使用。 -
import
data
中使用,需要使用静态方法和静态常量,如需要使用View.Visble
属性的时候,则需导入。
type
属性指明类的路径,如果两个import
标签导入的类名相同,则可以使用alias
属性声明别名,使用的时候直接使用别名即可。 -
include
View
标签中使用,作用同普通布局中的include
一样,需要使用bind:
传递参数
- 生成绑定类
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// 1.Binding生成的方式一
val binding: LoginFragmentBinding = DataBindingUtil.inflate(
inflater
, R.layout.login_fragment
, container
, false
)
onSubscribeUi(binding)
val loginModel = LoginModel("","",context!!)
binding.model = loginModel
binding.activity = activity
return binding.root
}
小结