资讯专栏INFORMATION COLUMN

Android Data Binding

fuyi501 / 2621人阅读

摘要:官方文档官方文档翻译官方文档实例基本结构对象布局文件以上三步完成了基本数据绑定动态更新当对象的数据发生变化时,自动更新。对象实现或继承其实现类字段基本的数据类型都有相应的类集合引用无论是对象字段还是集合,都是以的方式存储数据。

Data Binding官方文档
Data Binding官方文档-翻译
Data Binding官方文档-实例

1. 基本结构 1.1 JavaBeans对象
public class User {
   private final String firstName;
   public User(String firstName) {
       this.firstName = firstName;
   }
   public String getFirstName() {
       return this.firstName;
   }
}
1.2 布局文件


   
       
   
   
       
   

1.3 Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
   User user = new User("Test");
   binding.setUser(user);
}

以上三步完成了基本数据绑定

2. 动态更新

当JavaBean对象的数据发生变化时,View自动更新。
正常的数据源只能做到绑定,想要动态更新,就必须要用Observable的方式存储数据,以下是实现Observable的三种方式。

2.1 Observable 对象

实现android.databinding.Observable或继承其实现类

private static class User extends BaseObservable {
   private String firstName;
   @Bindable
   public String getFirstName() {
       return this.firstName;
   }
   public void setFirstName(String firstName) {
       this.firstName = firstName;
       notifyPropertyChanged(BR.firstName);
   }
}
2.2 Observable 字段

基本的数据类型都有相应的Observable类

public final ObservableField firstName = new ObservableField<>();
2.3 Observable 集合
ObservableArrayMap mapUser = new ObservableArrayMap<>();
user.put("firstName", "Google");
2.4 引用

无论是对象、字段还是集合,都是以Observable的方式存储数据。接下来就是在布局中引用了。


    
        
        
        
        
    

    

        
        

        
        

        
        

    


3. RecyclerView动态绑定
private static class RecyclerViewAdapter
        extends RecyclerView.Adapter {

    private List mModels;

    public static class BindingHolder extends RecyclerView.ViewHolder {
        private final ViewDataBinding binding;

        public BindingHolder(ViewDataBinding binding) {
            super(binding.getRoot());
            this.binding = binding;
            // 这里可以binding.getRoot().findViewById,然后再onBindViewHolder中绑定事件,目前没有找到更方便的方法
        }

        public ViewDataBinding getBinding() {
            return binding;
        }
    }

    @Override
    public BindingHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        ViewDataBinding binding = DataBindingUtil.inflate(
                LayoutInflater.from(parent.getContext()),
                R.layout.list_item,
                parent,
                false);

        BindingHolder holder = new BindingHolder(binding);

        return holder;
    }

    @Override
    public void onBindViewHolder(final BindingHolder holder, int position) {
        final Model model = mModels.get(position);

        holder.getBinding().setVariable(BR.model, model);
        holder.getBinding().getRoot().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
        holder.getBinding().executePendingBindings();
    }

    @Override
    public int getItemCount() {
        return mModels.size();
    }

}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/12323.html

相关文章

  • Data Binding 用户指南(Android

    摘要:未来会有进一步的的支持。避免代码生成时自动检查是否为来避免出现错误。有三种不同的数据变化通知机制对象以及。接口有一个机制来添加和删除监听器,但通知与否由开发人员管理。这是通过指定一个注解给以及内通知来完成的。 注意: 该文不再更新,有问题请转至以下链接 Data Binding(数据绑定)用户指南 1. 介绍 这篇文章介绍了如何使用Data Binding库来写声明的layouts文...

    BicycleWarrior 评论0 收藏0
  • Android中的Data Binding初探 (一)

    摘要:数据绑定会根据的名称自动生成类,比如会自动生成一个类,中的方法,会根据中的属性自动生成。如果在或的中,我们需要使用如下方式获取目前对对象没有自动代码提示,只会在编译时进行检查。 今年的Google IO大会,给Andorid开发者带来了很多新东西,比如新的Material Design支持库,还有Data Binding技术,使用Data Binding,我们可以很方便的实现 MVVM...

    kamushin233 评论0 收藏0
  • Android开发利器之Data Binding Compiler V2 —— 搭建Android

    摘要:而就是为了解决目前的架构中的缺点而诞生的。所以通过实现数据双向绑定并不是一个完美的方案。系列组件的主要功能就是使控制层能够感知层的生命周期。 原创声明: 该文章为原创文章,未经博主同意严禁转载。 前言: Android常用的架构有:MVC、MVP、MVVM,而MVVM是唯一一个官方提供支持组件的架构,我们可以通过Android lifecycle系列组件、DataBinding或者通过组...

    王岩威 评论0 收藏0
  • Android Data Binding代码实战

    摘要:代码实现我根据的顺序介绍代码实现。在中使用这样的表达式将变量进行绑定。中的是根据自动生成的类,如果的名称是,生成的类名称就是。目前只能实现单向绑定,期待以后能支持双向绑定。 本文介绍使用Android Data Binding技术,结合豆瓣电影搜索API,在RecycleView中展示电影列表。 showImg(https://segmentfault.com/img/remote/...

    oliverhuang 评论0 收藏0
  • Android开源架构

    摘要:音乐团队分享数据绑定运行机制分析一个项目搞定所有主流架构单元测试一个项目搞定所有主流架构系列的第二个项目。代码开源,展示了的用法,以及如何使用进行测试,还有用框架对的进行单元测试。 Android 常用三方框架的学习 Android 常用三方框架的学习 likfe/eventbus3-intellij-plugin AS 最新可用 eventbus3 插件,欢迎品尝 简单的 MVP 模...

    hzc 评论0 收藏0
  • Android开源架构

    摘要:音乐团队分享数据绑定运行机制分析一个项目搞定所有主流架构单元测试一个项目搞定所有主流架构系列的第二个项目。代码开源,展示了的用法,以及如何使用进行测试,还有用框架对的进行单元测试。 Android 常用三方框架的学习 Android 常用三方框架的学习 likfe/eventbus3-intellij-plugin AS 最新可用 eventbus3 插件,欢迎品尝 简单的 MVP 模...

    sutaking 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<