Android开发 -- Jetpack 之 Data Binding 是什么、快速入门、简单使用、通俗解释

全文阅读预计 10 分钟

这可能是你看过的最清晰明了的讲解

主题 👇

写在前面:日常开发中,对于 UI 的修改通常我们会使用 findViewById 这个方法,现在我们的页面上有一个 TextView 假如说如果有一个东西可以让你不用获取这个 tv 就可以修改这个控件的 text、textColor 等各种参数呢,然后它又是 Google 官方推荐使用的,然后你又不需要手动去写注解、各种绑定等等,教程会会很短,很清晰,Now, Let’s start to learn it!

官方说明:数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。

差不多读读得了,翠花上代码~

使用 👇

配置

在你的 build.gradle 文件中配置如下

apply plugin: 'kotlin-kapt'

android{
    ...
    dataBinding {
        enabled true
    }
}
// 注意:
// 如果你不只有 app 一个 Module
// 那么请在其它的 Module 的 build.gradle 文件中都配置一下

编写 ViewModel

还不知道什么是 LiveData ?请进入此链接学习我对于 LiveData 的快速及通俗讲解。 全文阅读预计 15 分钟。

还不知道什么是 ViewModel ?请进入此链接学习我对于 ViewModel 的快速及通俗讲解。 全文阅读预计 10 分钟。

public class SevenViewModel extends ViewModel {
    public MutableLiveData<String> nickname;
    public MutableLiveData<Boolean> isShow;

    public MutableLiveData<String> getNickname() {
        if (nickname == null)
            nickname = new MutableLiveData<>();
        return nickname;
    }

    public void getUserInfo() {
        // 模拟获取网络数据
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                getNickname().setValue("嘿嘿");
                // 如果使用 Java 作为开发语言,那么建议我们都像 nickname 那样写一个 getNickname() 方法
                // 避免我们因为人为的疏忽而造成空指针异常,毕竟我们一般情况下都不会像下面 isShow 这样在每个
                // 地方都进行初始化,当然你可以在声明变量的时候直接
                // public MutableLiveData<Boolean> isShow = new MutableLiveData<>();
                // 不过这都是根据你的情况,在这里也向你推荐学习一下 Kotlin 语言开发 Android,它的开发非常
                // 快速,我们这个页面的代码如果使用 Kotlin 编写,大概只需要 10 行左右,不过会 Kotlin 的基
                // 本都会 Java,所以这里方便都能看懂所以提供 Java 版本的讲解
                isShow = new MutableLiveData<>();
                isShow.setValue(false)
            }
        }, 2000);
    }
}

编写 XML

<?xml version="1.0" encoding="utf-8"?>
<!-- 需要以 layout 为根标签 -->
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
        <!-- 导入 View 包,因为第二个 TextView 用到了 View.VISIBLE 和 View.GONE -->
        <import type="android.view.View" />
    
        <!-- sevenViewModel 这个名字可以随便取 -->
        <!-- type={你的 ViewModel 的路径} -->
        <variable
            name="sevenViewModel"
            type="com.example.studyproject.SevenViewModel" />
    </data>

    <!-- 这里是你的界面的布局 -->
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <!-- 这里的 @{sevenViewModel.nickname} 对应 ViewModel 中的 nickname -->
        <TextView
            android:id="@+id/tv_nickname"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@{sevenViewModel.nickname}" />
            
        <!-- 这里的 @{sevenViewModel.isShow} 对应 ViewModel 中的 isShow -->
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:text="一段文字"
            android:visibility="@{sevenViewModel.isShow ? View.VISIBLE : View.GONE}" />
    </FrameLayout>
</layout>

编写 Activity

public class SevenActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 将 Activity 和 布局 绑定
        ActivitySevenBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_seven);
        // 得到 ViewModel
        SevenViewModel viewModel = ViewModelProviders.of(this).get(SevenViewModel.class);
        // 将 DataBinding 和 ViewModel 互绑
        // BR 用的是你项目包名下的,会自动生成
        // 如果你的没有生成,试试:
        // clean Project 或 Rebuild Project
        // 如果实在没有生成可以在代码报错的情况下直接运行试试都有可能
        binding.setVariable(BR.sevenViewModel, viewModel);
        // 给 binding 设置 owner(LiveData 中有讲)
        binding.setLifecycleOwner(this);
        // 获取用户信息,此方法中 setValue() 方法调用完毕后,你的界面就会更新了
        viewModel.getUserInfo();
    }
}

还不知道什么是 LifecycleOwner ?请进入此链接学习我对于 LiveData 的快速及通俗讲解。 全文阅读预计 15 分钟。

文末 👇

如此,你已经走入了 Data Binding 的大门,当然 Data Binding 真正能做到的比上面多的太多了,我将在今后的博客中进行讲解,敬请关注!

码字不易,还请动动小手左侧栏中点赞 👍,3Q

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值