JetPack--Databing使用

1.配置dataBinding

在module的build.gradle文件下,Android 模块下添加

 dataBinding {
        enabled = true
    }

2.布局

这里的布局文件和普通的Android 布局文件不一样,是以layout 开头,你可以像写普通布局一样,先写完UI结构,然后通过转换成Databind的这种结构。
光标放到布局的根控件上,alt+insert ,选择convert to data binding layout.
在这里插入图片描述
就生成了以下形式,很简单。

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <data> //代表布局文件对接的数据有哪些,什么类型
        <variable // 变量
            name="user"
            type="com.example.myapplication.User" />
        <import type="com.example.myapplication.User"/>// 导入对象的包名
    </data>
    <LinearLayout
        android:id="@+id/container"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingTop="?attr/actionBarSize">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{ user.name}" //直接引用对象的变量
            android:id="@+id/result" />

    </LinearLayout>
</layout>

3.代码

系统会为该模块中包含的每个 XML 布局文件各生成一个绑定类。每个绑定类均包含对根视图以及具有 ID 的所有视图的引用。系统会通过以下方式生成绑定类的名称:将 XML 文件的名称转换为驼峰式大小写,并在末尾添加“Binding”一词。viewDataBinding对象可以直接设置数据,也可以获取UI里的控件,去做其他的处理,这样的形式大大简化了逻辑。


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_main);

        //在activity里使用的是ActivityMainBinding,它其实就是现在咱们的布局对象。
        final ActivityMainBinding viewDataBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        final User user = new User();
        user.setId(1);
        user.setName("lily");

        viewDataBinding.setUser(user);
    }
}

viewDataBinding相当于布局文件的另一种身份。有两种获取方式。

 final ActivityMainBinding inflate = ActivityMainBinding.inflate(getLayoutInflater());

 final ActivityMainBinding viewDataBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
     

ActivityMainBinding能够获取bean对象,获取布局里的控件,获取根布局。

viewDataBinding.result
viewDataBinding.getUser()
viewDataBinding.getRoot()

4.xml布局

当布局文件中存在一样的类名时,可以这样做

 <import
        alias="TempUser" // 取个别名,来区分
          type="com.leavesc.databinding_demo.model2.User" />

给布局添加默认值

	android:text="@{userInfo.name,default=defaultValue}"

通过ViewDataBinding找到控件

 	viewDataBinding.result.setText("Tom");

自定义 ViewDataBinding 的实例名 就是在界面里的类似ActivityMainBinding

 	<data class="CustomBinding">
		
    </data>

控件的点击事件
实现控件的点击事件,如果需要外部类,就需要导入该类

  <variable
            name="mainactivity"
            type="com.example.myapplication.MainActivity" />
        <import type="com.example.myapplication.MainActivity"/>

  <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{ user.name}"
            android:onClick="@{() -> mainactivity.onSaveClick()}"
            android:id="@+id/result" />

null 运算符
左边不为null,使用左边运算,否则使用右边。

android:text="@{user.displayName ?? user.lastName}"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值