Android数据绑定Data Binding初体验

Android数据绑定Data Binding初体验

配置

新版的Android Studio 已内置数据绑定框架,只需在app的build.gradle中添加

android {
    ....
    dataBinding {
        enabled = true
    }
}

布局文件的改变

比起原来的布局文件,增加了layout为root节点,data节点进行数据的声明

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
    </data>
    <!--原先的根节点(Root Element)-->
    <LinearLayout>
    ....
    </LinearLayout>
</layout>

Data节点

在data节点中声明数据变量
name为声明的名称
type为该类的包名+类名

<variable
        name="user"
        type="com.ethanco.mydatabinding.User" />

简单的例子 ##

新建User类

public class User {
    private final String firstName;
    private final String lastName;

    public User(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }
}

编写布局

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="user"
            type="com.ethanco.mydatabinding.User" />
    </data>
    <!--原先的根节点(Root Element)-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.lastName}" />
    </LinearLayout>
</layout>

绑定数据

当编写好variable,就会自动生成一个继承ViewDataBinding的类,例如activity_main.xml就会生成ActivityMainBinding

ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
User user = new User("Test", "User");
binding.setUser(user);

运行程序

即发现TextView的text以显示为Test和User

绑定事件

View.OnClickListener有个方法onClick(), 你就可以使用android:onClick属性来绑定一个方法
注意:绑定的方法的签名必须和该属性原本对应的方法的签名完全一样,否则编译阶段会报错。

新建MyHandlers类
public class MyHandlers {
    public void onClick(View view) {
        Log.i("zhk-MyHandlers", "onClick: ");
        Toast.makeText(view.getContext(), "onClick", Toast.LENGTH_SHORT).show();
    }
}
声明
<variable
        name="handlers"
        type="com.ethanco.mydatabinding.MyHandlers" />
设置绑定
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="@{handlers.onClick}"
        android:text="ClickMe" />
设置Handlers

在Activity中

ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
.....  
binding.setHandlers(new MyHandlers());

运行程序

点击Button发现以绑定了MyHandlers的onClick方法

其他

现在Data Binding只支持单向绑定,期待双向绑定,届时,各种注解就正的可以下岗了!

参考
https://github.com/LyndonChin/MasteringAndroidDataBinding
https://github.com/derron/DataBinding-album-sample/blob/master/MVVM.md

程序源码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android数据绑定是一个支持双向绑定的库,它可以帮助你将UI组件和数据模型绑定起来,从而可以轻松地更新UI组件或数据模型的值。 Android RecyclerView是一种用于显示大量数据的高级组件,它可以在滚动时动态地加载和卸载数据项,并提供了类似于ListView的布局管理器。 使用Android数据绑定和RecyclerView,可以更轻松地实现列表的数据绑定。你可以在适配器中使用数据绑定表达式来更新列表项视图的值,同时还可以监听数据模型的变化,以便在数据更新时刷新列表项。 要在RecyclerView中使用数据绑定,需要将适配器继承自RecyclerView.Adapter,并且在绑定视图时使用DataBindingUtil类来获取视图的绑定对象。然后,可以在绑定对象中使用数据绑定表达式来更新视图的值。 例如,下面的代码片段演示了如何使用数据绑定更新RecyclerView列表项的文本视图: ```java public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> { private List<MyData> mDataList; // ... @Override public void onBindViewHolder(MyViewHolder holder, int position) { MyData data = mDataList.get(position); ViewDataBinding binding = DataBindingUtil.bind(holder.itemView); binding.setVariable(BR.myData, data); binding.executePendingBindings(); } } public class MyViewHolder extends RecyclerView.ViewHolder { // ... public MyViewHolder(View itemView) { super(itemView); } } ``` 在MyViewHolder类中,我们只需要简单地继承自RecyclerView.ViewHolder,并且不需要实现任何逻辑。在适配器的onBindViewHolder()方法中,我们首先获取当前位置的数据模型,然后使用DataBindingUtil.bind()方法获取视图的绑定对象。接下来,我们使用setVariable()方法将数据模型设置为绑定对象的属性,然后调用executePendingBindings()方法来立即更新视图。 需要注意的是,在使用数据绑定时,你需要在build.gradle文件中添加以下依赖: ```groovy android { // ... dataBinding { enabled = true } } dependencies { // ... implementation 'com.android.databinding:library:1.4.0' } ``` 希望这个回答能够帮助你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

氦客

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值