需求:在输入框输入文字,实时的显示在文本上,使用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()
}
}