Android Data Binding 入门与学习
in Android with 0 comment
Read: 683

Android Data Binding 入门与学习

in Android with 0 comment

本篇博客为在慕课网学习记录笔记
原视频链接:http://www.imooc.com/learn/719
Google官方链接:https://developer.android.com/tools/data-binding/guide.html

Android Data Binding 是google推出的一个框架,这个框架可以简化我们的代码,让我们的代码更具有灵活性

Data Binding 解决了 Android UI 编程中的一个痛点,官方原生支持 MVVM模型可以让我们在不改变既有代码框架的前提下,非常容易地使用这些新特性。其实在此之前,已经有些第三方的框架(RoboAndroid) 可以支持 MVVM 模型,无耐由于框架的侵入性太强,导致一直没有流行起来

如何使用

仅仅需要在build.gradle中启用databinding即可:

android {
    ...

    dataBinding{
        enabled=true;
    }

    ...
}

入门一 - 实现简单的创建视图和数据绑定

实现简单的创建视图和数据绑定

         /**
         * 生成规则:
         *
         * layout : activity_main.xml
         * binding :ActivityMainBinding
         */
        ActivityMainBinding binding =
                DataBindingUtil.setContentView(this,R.layout.activity_main);
         /**
         *  TextView 的 id  : first_name ===>>binding.firstName
         */
        binding.firstName.setText(employee.getFirstName());
        binding.lastName.setText(employee.getLastName());

这样数据就实现了创建视图和对控件进行赋值的效果,进而替代了以前的setContentView和findViewById

入门二 - 将数据注入布局的xml中,进行数据的赋值

将数据注入布局的xml中,进行数据的赋值

<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
        <variable
            name="employee"
            type="com.monsterlin.demo_databinding.Employee"/>
        
    </data>

   ...
</layout>

其中name标签可以随便起名,type注明数据类型

    binding.setEmployee(employee);

    // binding.setVariable(BR.employee,employee);  //效果一样,都是在xml中注入数据源

这样在我们的xml中就含有这个数据源了

入门三 - 事件的绑定

事件的绑定:方法绑定和监听器绑定

方法绑定

       public void onTextChanged(CharSequence s , int start ,int before ,int count ){
            employee.setFirstName(s.toString());
            binding.setEmployee(employee);
        }

        public void onClick(View view){
            Toast.makeText(MainActivity.this,"点到了",Toast.LENGTH_SHORT).show();
        }

    <data>
      ...
        
        <variable
            name="presenter"
            type="com.monsterlin.demo_databinding.MainActivity.Presenter"/>

    </data>

注意添加完变量,要在binding中进行set操作

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onTextChanged="@{presenter.onTextChanged}"
            android:hint="输入firstName"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="18sp"
            android:layout_margin="8dp"
            android:onClick="@{presenter.onClick}"
            android:text="@{employee.firstName}"/>

监听器绑定

可以在xml中传任意数据到java代码中

         public void onClickListenerBinding(Employee employee){
            Toast.makeText(MainActivity.this,employee.getLastName(),Toast.LENGTH_SHORT).show();
        }
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="18sp"
            android:layout_margin="8dp"
            android:onClick="@{()->presenter.onClickListenerBinding(employee)}"
            android:text="@{employee.lastName}"/>

Demo下载

推荐链接

Responses