美文网首页
DataBinding数据视图绑定篇

DataBinding数据视图绑定篇

作者: 麻油里 | 来源:发表于2019-03-27 22:31 被阅读0次

DataBinding可以让普通对象,变量和集合变成可观察的。这些对象与View绑定后,属性发送变化时会,View会自动进行对应的修改。

基础变量

基础类型支持的变量包括

  • ObservableBoolean
  • ObservableByte
  • ObservableChar
  • ObservableShort
  • ObservableInt
  • ObservableLong
  • ObservableFloat
  • ObservableDouble
  • ObservableParcelable

例子

ObservableField<String> obName = new ObservableField<>();
obName.set("aaa");
binding.setObName(obName);
obName.set("bbb");
 <data>

        <import type="androidx.databinding.ObservableField" />

        <variable
            name="obName"
            type="ObservableField&lt;String>" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_horizontal"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{obName}" />

    </LinearLayout>

最终打印的是bbb。说明可观测变量obName在设置值后,TextView自动更新了text。

自定义类

基础BaseObservable,在get方法上添加注解@Bindable,在set方法中添加notifyPropertyChanged方法。

public class UserBean extends BaseObservable{

    private String name;


    public UserBean() {
    }

    public UserBean(String name) {
        this.name = name;
    }

    @Bindable
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
        notifyPropertyChanged(BR.name);
    }

}

xml中正常实用即可

 <data>
        <variable
            name="userBean"
            type="com.qianfanyun.lib.recyclerview.UserBean" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_horizontal"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{userBean.name}" />

    </LinearLayout>
UserBean userBean = new UserBean("aaa");
binding.setUserBean(userBean);
userBean.setName("bbb");

显示结果为bbb。

双向绑定

双向绑定值,数据变化时View会改变,View改变时,也会触发数据改变。

上面讲了View单向绑定数据,想要在View变化时让数据也改变,只需要将表达式@{}改为@={}

    <data>
        <variable
            name="userBean"
            type="com.qianfanyun.lib.recyclerview.UserBean" />

        <variable
            name="handler"
            type="com.qianfanyun.databinding.MainActivity.Handler"/>
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_horizontal"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tv_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@={userBean.name}"
            android:onClick='@{()->handler.onClick("bbb")}'
            />

    </LinearLayout>
public class MainActivity extends AppCompatActivity {

    ActivityMainBinding binding;
    UserBean userBean;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        userBean = new UserBean("aaa");
        binding.setHandler(new Handler());
        binding.setUserBean(userBean);
    }


    public class Handler {
        public void onClick(String name) {
            binding.tvName.setText(name);

            Log.d("x", "bean name--->" + userBean.getName());
        }
    }

最终打印为bbb。确定user的name属性产生了变化。

总结

通过DataBinding,View和数据之间可以实现单向绑定和双向绑定。

相关文章

  • DataBinding数据视图绑定篇

    DataBinding可以让普通对象,变量和集合变成可观察的。这些对象与View绑定后,属性发送变化时会,View...

  • 安卓ViewBinding与RecyclerView Adapt

    1. 视图绑定ViewBinding与数据绑定DataBinding ViewBinding库会为每个xxx_la...

  • MVVM模式之databinding(一)

    1.介绍 dataBinding对android视图的数据绑定十分友好,并且支持视图与数据的双向绑定,大大简化了传...

  • Jetpack-DataBinding

    DataBinding概述 DataBinding主要是将数据与UI控件的绑定,你无需手动调用视图来 set 新状...

  • Android DataBinding系列详解(二)

    上文简单地介绍了DataBinding将静态数据绑定到视图上,除了简单地静态数据绑定外,还支持动态地将数据自动更新...

  • Jetpack DataBinding

    Jetpck 才是真的豪华全家桶 引言 DataBinding 实现了视图与数据的双向绑定,代码简洁,Activi...

  • MVVM

    DataBinding基础用法 DataBinding入门 Android数据绑定框架DataBinding,堪称...

  • Jetpack DataBinding

    作用 将视图绑定到Activity不再需要findViewById() DataBinding 与 ViewMod...

  • Jetpack系列-DataBinding使用和源码分析

    1 简介和简单使用 1.1 简介 DataBinding是Google推出的一款数据和视图绑定库,可以省去find...

  • 数据的绑定 --- 双向绑定

    数据双向绑定 : 视图的数据可以绑定到模型当中,模型的数据可以绑定到视图当中 想要实现视图的数据绑定到模型当中,必...

网友评论

      本文标题:DataBinding数据视图绑定篇

      本文链接:https://www.haomeiwen.com/subject/jvexbqtx.html