MVVM初探

115 阅读1分钟

需求:在输入框输入文字,实时的显示在文本上,使用viewmodel实现
kotlin代码
0 app的build.gradle中

 dataBinding{
        enabled true
    }

1创建MainVM 继承 ViewModel,用于管理可被观察的数据。

class MainVM: ViewModel() {
    var content = ObservableField<String>()
}

2布局文件增加layout标签,data标签,variable标签跟MainVM进行关联
@{vm.content}只读;@={vm.content}可写

<?xml version="1.0" encoding="utf-8"?>

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="vm"
            type="com.xiangxue.mvx.mvvm.MainVM" />
    </data>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{vm.content}" />

        <EditText
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:text="@={vm.content}" />


    </LinearLayout>


</layout>

3使用DataBindingUtil的setContentView方法将Activity跟布局文件进行关联,
再次调用布局文件中的vm变量属性跟MainVM实例进行关联,最终实现EditText跟TextView的联动

class KotlinTestActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
//        setContentView(R.layout.activity_kotlin_test)

        val contentView = DataBindingUtil.setContentView<ActivityKotlinTestBinding>(this, R.layout.activity_kotlin_test)
        contentView.vm=MainVM()
    }
}