栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android Jetpack - Databinding

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android Jetpack - Databinding


DataBinding 是为了解除 Controller 与 ViewGroup 之间的引用联系

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

布局通常是使用调用界面框架方法的代码在 Activity 中定义的。例如,以下代码调用 findViewById() 来查找 TextView 微件并将其绑定到 viewModel 变量的 userName 属性:

TextView textView = findViewById(R.id.sample_text);
textView.setText(viewModel.getUserName());

以下示例展示了如何在布局文件中使用数据绑定库将文本直接分配到微件。这样就无需调用上述任何 Java 代码。请注意赋值表达式中 @{} 语法的使用:


        

借助布局文件中的绑定组件,您可以移除 Activity 中的许多界面框架调用,使其维护起来更简单、方便。还可以提高应用性能,并且有助于防止内存泄漏以及避免发生 Null 指针异常。

注意:在许多情况下,ViewBinding 可简化实现,提高性能,提供与 DataBinding 相同的好处。如果您使用 DataBinding 的主要目的是取代 findViewById()调用,请考虑改用 ViewBinding。

基本使用
  1. 请在模块的 build.gradle 文件中将 dataBinding 构建选项设置为 true,如下所示:
android {
    ...
    buildFeatures {
        dataBinding true
    }
}
  1. 结合 LiveData 实现 MyViewModel:
public class MyViewModel extends ViewModel {
    private MutableLiveData likedNumber;

    public MutableLiveData getLikedNumber() {
        if (likedNumber == null) {
            likedNumber = new MutableLiveData<>();
            likedNumber.setValue(0);
        }
        return likedNumber;
    }

    public void addNumber(int n) {
        likedNumber.setValue(likedNumber.getValue()+n);
    }
}
  1. 布局优化
    layout
    布局根节点必须是 . 同时layout只能包含一个View标签. 不能直接包含
    data
    标签的内容即 DataBinding 的数据. data标签只能存在一个.
    variable
    通过标签可以指定类, 然后在控件的属性值中就可以使用


    
        
    

    

        

        
  1. 极大简化 Activity 中的逻辑
    MyViewModel viewModel;
    // 当对布局进行优化之后,DataBinding 会根据你的 Activity 类名自动创建对应的 binding 类
    ActivityDataBindingBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this, R.layout.activity_data_binding);
        lv = new ViewModelProvider(this).get(MyViewModel.class);
        binding.setData(viewModel);
        binding.setLifecycleOwner(this);
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/922248.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号