今日总结:数据的独立(Data Binding)
注:mvvm是双向的,并且是自动的,也就是数据发生变化自动同步视图,视图发生变化自动同步数据
model-view-ViewModel
第一步:在
中的defaultConfig{}中加入以下代码:
dataBinding{
enabled true
}

第二步:在对应的 layout 文件中点击 小灯泡,将此文件转换为databinding形式,因此可以使用<data></data>形式
第三步:在主活动创建databinding 对象 
其中ActivityMain2Binding 类名是基于你创建对应layout文件的名字生成的
进行layout文件的绑定:
binding = DataBindingUtil.setContentView(this,R.layout.activity_main2);
第四步:在layout文件中设置对应数据的动作更新

第五步:回绑(在主活动中)将myViewModel中的数据绑到(赋值)layout文件中的data上。
binding.setData(myViewModel);
binding.setLifecycleOwner(this);
源文件:MainActivity2.java
package com.example.myapplication; import androidx.appcompat.app.AppCompatActivity; import androidx.databinding.DataBindingUtil; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.example.myapplication.databinding.ActivityMain2Binding; public class MainActivity2 extends AppCompatActivity { MyViewModel myViewModel; ActivityMain2Binding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main2); binding = DataBindingUtil.setContentView(this,R.layout.activity_main2); myViewModel = new ViewModelProvider(this).get(MyViewModel.class); binding.setData(myViewModel); binding.setLifecycleOwner(this); } }
activity_main2.xml
<?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="data" type="com.example.myapplication.MyViewModel" /> </data> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity2"> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{String.valueOf(data.number)}" android:textSize="34sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.556" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/Main2button1" android:onClick="@{()->data.add()}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.498" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView2" app:layout_constraintVertical_bias="0.206" /> </androidx.constraintlayout.widget.ConstraintLayout> </layout>

浙公网安备 33010602011771号