Android-DataBinding入门1

1、需要开启DataBinding功能:

在build.gradle配置:

android{ dataBinding{ enabled = true } } 2、布局

布局中,根节点要以layout开头,声明数据使用data标签。在data中可以为数据对象声明变量,引入要使用的类等。(1)在具体控件中使用对象的数据也挺简单的,使用@{对象变量.对象属性}就可以取出数据了;(2)支持绑定事件:@{对象.方法名(参数)}。
代码如下:activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <!-- DataBinding 现在根节点layout --> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 绑定的数据对象 --> <data> <!-- 为数据对象声明变量:user,取出属性的用法:@{user.userName} --> <variable type="com.ha.cjy.databingdemo.model.UserModel"/> <variable type="com.ha.cjy.databingdemo.MainActivityPresenter"/> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:layout_margin="12dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="12dp" android:textSize="16sp" android:background="@android:color/white" android:textColor="@color/colorPrimary" android:hint="显示用户名" android:text="@{user.userName}" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="12dp" android:padding="12dp" android:textSize="16sp" android:background="@android:color/white" android:textColor="@color/colorPrimary" android:hint="显示手机号码" android:text="@{user.telPhone}" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginTop="12dp" android:background="@color/colorPrimary"/> <EditText android:id="@+id/et_userName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="12dp" android:padding="12dp" android:textSize="16sp" android:background="@android:color/white" android:textColor="@color/colorPrimary" android:hint="输入用户名" /> <EditText android:id="@+id/et_telPhone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="12dp" android:padding="12dp" android:textSize="16sp" android:background="@android:color/white" android:textColor="@color/colorPrimary" android:hint="输入手机号码" /> <Button android:id="@+id/btn_update" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="12dp" android:padding="12dp" android:textSize="16sp" android:background="@color/colorPrimary" android:textColor="#FFFFFF" android:text="更新数据" android:onClick="@{presenter.onClickEvent}" /> </LinearLayout> </layout> 3、代码

在ManiActivity中,需要为布局和数据进行绑定操作:DataBindingUtil.setContentView(Activity activity, int layoutId)

package com.ha.cjy.databingdemo; import android.databinding.DataBindingUtil; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import com.ha.cjy.databingdemo.databinding.ActivityMainBinding; import com.ha.cjy.databingdemo.model.UserModel; public class MainActivity extends AppCompatActivity implements MainActivityPresenter{ //对应的是layout文件名,后缀Binding,这个是自动生成的 private ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); binding = DataBindingUtil.setContentView(this,R.layout.activity_main); binding.setPresenter(this); UserModel userModel = new UserModel("测试姓名","18012365485"); binding.setUser(userModel); } @Override public void onClickEvent(View view) { //注意:使用DataBinding,控件的获取应该使用DataBinding对象,而不是通过findViewById获取(这样的方式获取不到控件的文本内容) userModel.setUserName(binding.etUserName.getText().toString()); userModel.setTelPhone(binding.etTelPhone.getText().toString()); binding.setUser(userModel); } } 这样子做,就完成了一个简单的dataBinding的使用,代码也比以前简洁了许多。 但是,看到这里,同学们不禁要问了:“不是说dataBinding的核心功能是实现单向数据绑定呀,没有看到呀,还是以前取出输入的文本重新赋值的做法,只是实现形式不一样而已。” 没错,这样的做法确实没有体现出单向绑定数据功能。接下来,我们来改造一下代码。 package com.ha.cjy.databingdemo; import android.databinding.DataBindingUtil; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import com.ha.cjy.databingdemo.databinding.ActivityMainBinding; import com.ha.cjy.databingdemo.model.UserModel; public class MainActivity extends AppCompatActivity implements MainActivityPresenter{ //对应的是layout文件名,后缀Binding,这个是自动生成的 private ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //进行DataBinding绑定 binding = DataBindingUtil.setContentView(this,R.layout.activity_main); binding.setPresenter(this); UserModel userModel = new UserModel("测试姓名","18012365485"); binding.setUser(userModel); } @Override public void onClickEvent(View view) { //注意:使用DataBinding,控件的获取应该使用DataBinding对象,而不是通过findViewById获取(这样的方式获取不到控件的文本内容) binding.getUser().setUserName(binding.etUserName.getText().toString()); binding.getUser().setTelPhone(binding.etTelPhone.getText().toString()); } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwjfpw.html