kotlin知识点
常量:val(value)
变量:var(variable)
构建MVVM步骤
启用Databinding
首先设置使用 Databinding,在 app module 的 build.gradle 中添加如下代码即可:
android {
...
dataBinding {
enabled = true
}
}
M model层
package com.example.ft.myktandmvvmstudy
data class Animal(val name: String,var shoutCount:Int )
V viev视图层
Activity
创建一个Activity,需要注意的是ActivityMainBinding类型,
生成规则是由DataBindingUtil.setContentView(this, R.layout.activity_main)中R.layout.id 名得来去掉下划线,首个字母大写最后再加上Binding。例子:R.layout.activity_main 得到 ActivityMainBinding
package com.example.ft.myktandmvvmstudy
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import com.example.ft.myktandmvvmstudy.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
lateinit var mBinding: ActivityMainBinding
lateinit var mViewMode : AnimalViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
val animal = Animal("dog", 0)
mViewMode = AnimalViewModel(animal)
mBinding.vm = mViewMode
}
}
xml
注意:根布局需要使用layout
多了 里面的type是 指向vm层包名+类型
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<!--需要的viewModel,通过mBinding.vm=mViewMode注入-->
<variable
name="vm"
type="com.example.ft.myktandmvvmstudy.AnimalViewModel"/>
</data>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="io.ditclear.app.view.AnimalActivity">
<TextView
android:id="@+id/info_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{vm.info}"
tools:text="dog1叫了1声.."
android:layout_marginBottom="24dp"
android:layout_gravity="center"/>
<Button
android:id="@+id/action_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAllCaps="false"
android:text="shout"
android:layout_marginTop="24dp"
android:layout_gravity="center"
android:onClick="@{()->vm.shout()}"/>
</FrameLayout>
</layout>
VM层
view model
package com.example.ft.myktandmvvmstudy
import androidx.databinding.ObservableField
/**
*Created by ft on 2021-04-14
* description:
*/
class AnimalViewModel(val animal: Animal) {
val info = ObservableField<String>("${animal.name} 叫了 ${animal.shoutCount}声..")
fun shout(){
animal.shoutCount++
info.set(("${animal.name} 叫了 ${animal.shoutCount}声.."))
}
}