介绍

通过数据绑定安卓可以实现类似于Vue的Mvvm(Model-View-ViewModel)功能,可以极大减少代码和逻辑负担。
官网描述

使用

  1. 配置

在build.gradle中写入以下代码来启用数据绑定

android {
    ...
    dataBinding {
        enabled = true
    }
}
  1. xml配置

打开 activity_main.xml 鼠标移入左上角 转换为data binding layout视图
转换为数据绑定视图
转换后是这样的:
在这里插入图片描述

  1. 创建数据源

数据源用ViewModel来创建
MyViewModel.java

public class MyViewModel extends ViewModel {
   MutableLiveData<Integer> aTeamScore;
   int aBack;
   public MutableLiveData<Integer> getaTeamScore() {
       if(aTeamScore == null){
           aTeamScore = new MutableLiveData<>();
           aTeamScore.setValue(0);
       }
       return aTeamScore;
   }
   public void aTeamAdd(int p){
       aBack = aTeamScore.getValue();
       aTeamScore.setValue(aTeamScore.getValue()+p);
   }
}
  1. 在activity中设置数据绑定视图和数据源

public class MainActivity extends AppCompatActivity {
   //数据绑定的数据
   MyViewModel myViewModel;
   //数据绑定的视图
   ActivityMainBinding binding;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_main); //不能再用原来的设置视图了
       binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
       myViewModel = new ViewModelProvider(this,new ViewModelProvider.NewInstanceFactory()).get(MyViewModel.class);
       binding.setData(myViewModel);
       binding.setLifecycleOwner(this);
   }
}
  1. 把数据和方法与xml视图绑定

在data中设置数据

<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.yangliwei.demo5.MyViewModel" />
   </data>
   ....
   </layout>

布局中的表达式使用“@{}”语法写入特性属性中。

//数据
<TextView android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="@{user.firstName}" />
//方法
 <Button  android:id="@+id/gAddOne"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/add1"
            android:onClick="@{()->data.aTeamAdd(1)}" />
Logo

Vue社区为您提供最前沿的新闻资讯和知识内容

更多推荐