1.导包 ViewModel 用于观察数据
// 使用androidx版本库
implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0-alpha03'
2.在build.gradle 添加 在android 代码块中添加 复制后点更新(Sync Now)
android{...// 步骤1.开启data bindingdataBinding {enabled = true}...
}
3.写个类继承 ViewModel
package com.example.mydatabinding;import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;public class MyViewModel extends ViewModel {private MutableLiveData<Integer> data;public MutableLiveData<Integer> getData() {if(data == null){data = new MutableLiveData<>();data.setValue(0);}return data;}public void add(){data.setValue(data.getValue() + 1);}
}
4.修改xml activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- 步骤2. 点击小灯泡生成新的xml -->
<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><variablename="dataIs"type="com.example.mydatabinding.MyViewModel" /></data><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><!--设置数据android:text="@{String.valueOf(dataIs.data)}"--><TextViewandroid:textSize="24sp"android:id="@+id/tv_content"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{String.valueOf(dataIs.data)}"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.526"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.191" /><!--点击事件 调用类中的方法android:onClick="@{() -> dataIs.add()}"--><Buttonandroid:onClick="@{() -> dataIs.add()}"android:id="@+id/btn_test"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/btn_txt"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.528"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.33" /></androidx.constraintlayout.widget.ConstraintLayout>
</layout>
5.简化后的代码 MainActivity.java
package com.example.mydatabinding;import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;import com.example.mydatabinding.databinding.ActivityMainBinding;public class MainActivity extends AppCompatActivity {private MyViewModel myViewModel;// private TextView textView;
// private Button button;//3.xml重新生成后就有了 ActivityMainBinding 对象,不是固定的 ,根据layout中起的名字 会生成不同的Binding对象private ActivityMainBinding binding;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//就可以不用了
// setContentView(R.layout.activity_main);//获取到xml主布局中的所有的viewbinding = DataBindingUtil.setContentView(this,R.layout.activity_main);
//
// button = findViewById(R.id.btn_test);
// textView =findViewById(R.id.tv_content);myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);// xml 中的 dataIsbinding.setDataIs(myViewModel);binding.setLifecycleOwner(this); //观察//观察 也可消掉/* myViewModel.getData().observe(this, new Observer<Integer>() {@Overridepublic void onChanged(Integer integer) {//内容发生改变
// textView.setText(String.valueOf(integer));binding.tvContent.setText(String.valueOf(integer));}});
*///事件 也可以消掉/*binding.btnTest.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//调用 方法myViewModel.add();}});*/}
}