架构组件—Android应用中使用视图绑定(binding)

2023-05-16

文章目录

  • 一. 概述
  • 二. 在Activity中使用视图绑定(binding)
      • 步骤一:在应用级 build.gradle (非项目级build.gradle)文件中开启viewBinding
      • 步骤二:在Activity Java文件中使用视图绑定功能
        • 2.1 导入ActivityMainBinding
        • 2.2 定义binding变量
        • 2.3 初始化binding变量
        • 2.4 使用binding
  • 三. 在Fragment中使用视图绑定(binding)
      • 步骤一:在应用级 build.gradle (非项目级build.gradle)文件中开启viewBinding
      • 步骤二:在Fragment Java文件中使用视图绑定功能
        • 2.1 导入FragmentLoginBinding
        • 2.2 定义binding变量
        • 2.3 初始化binding变量
        • 2.4 使用binding
  • 四. 参考资料
  • 五. 结束语

一. 概述

通过视图绑定功能,您可以更轻松地编写可与视图交互的代码。在模块中启用视图绑定之后,系统会为该模块中的每个 XML 布局文件生成一个绑定类。绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。
在大多数情况下,视图绑定会替代 findViewById。


二. 在Activity中使用视图绑定(binding)

步骤一:在应用级 build.gradle (非项目级build.gradle)文件中开启viewBinding

视图绑定功能启用。需将 viewBinding 元素添加到其 build.gradle 文件中,如下例所示:

    viewBinding {
        enabled = true
    }

步骤二:在Activity Java文件中使用视图绑定功能

2.1 导入ActivityMainBinding

import com.example.demo.databinding.ActivityMainBinding;

2.2 定义binding变量

    // 声明binding用于视图绑定功能
    private ActivityMainBinding binding;

2.3 初始化binding变量

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 使用binding视图绑定功能
        /*
         * 通过视图绑定功能,您可以更轻松地编写可与视图交互的代码。在模块中启用视图绑定之后,系统会为该模块中的每个 XML 布局文件生成一个绑定类。
         * 绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。
         * */
        // 初始化binding 
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        View view = binding.getRoot();
        setContentView(view);
    }

2.4 使用binding

使用视图绑定功能引用控件,如:
binding.bottomNavigationViewMain

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 使用binding视图绑定功能
        /*
         * 通过视图绑定功能,您可以更轻松地编写可与视图交互的代码。在模块中启用视图绑定之后,系统会为该模块中的每个 XML 布局文件生成一个绑定类。
         * 绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。
         * */
        // 初始化binding 
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        View view = binding.getRoot();
        setContentView(view);
		//使用视图绑定引用控件bottomNavigationViewMain
        // 为bottomNavigationViewMain设置监听事件setOnNavigationItemSelectedListener,onNavigationItemSelected,用于改变viewPager2Main的CurrentItem
        binding.bottomNavigationViewMain.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @SuppressLint("NonConstantResourceId")
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                return false;
            }
        });

    }

三. 在Fragment中使用视图绑定(binding)

步骤一:在应用级 build.gradle (非项目级build.gradle)文件中开启viewBinding

与在Activity中使用视图绑定(binding)的步骤一相同

步骤二:在Fragment Java文件中使用视图绑定功能

2.1 导入FragmentLoginBinding

import com.example.demo.databinding.FragmentLoginBinding;

2.2 定义binding变量

    // 声明Binding对象
    private FragmentLoginBinding binding;

2.3 初始化binding变量

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        //使用binding视图绑定功能
        /*
         * 通过视图绑定功能,您可以更轻松地编写可与视图交互的代码。在模块中启用视图绑定之后,系统会为该模块中的每个 XML 布局文件生成一个绑定类。
         * 绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。
         * */
        binding = FragmentLoginBinding.inflate(inflater, container, false);
        View view = binding.getRoot();
        return view;

    }

2.4 使用binding

使用视图绑定功能引用控件,如:
binding.buttonLoginLogin

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        //使用binding视图绑定功能
        /*
         * 通过视图绑定功能,您可以更轻松地编写可与视图交互的代码。在模块中启用视图绑定之后,系统会为该模块中的每个 XML 布局文件生成一个绑定类。
         * 绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。
         * */
        binding = FragmentLoginBinding.inflate(inflater, container, false);
        View view = binding.getRoot();

        binding.buttonLoginLogin.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_loginFragment_to_mainActivity, null));

        return view;

    }

四. 参考资料

https://developer.android.google.cn/topic/libraries/view-binding


五. 结束语

本文档为博主自主学习Android应用开发过程中的经验总结与心得体会,希望能在读者的学习道路上帮上一点点小忙,共同学习,共同成长。
欢迎读者评论留言,点赞,收藏,分享!


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

架构组件—Android应用中使用视图绑定(binding) 的相关文章

  • R语言中的igraph包绘制网络图

    本文转自网络 R语言中的igraph包可以很方便地画出网络图 xff0c 在社交关系分析等领域发挥重要作用 xff0c 下面介绍包中一个重要的函数graph from data frame xff08 xff09 graph from da
  • OnNewIntent四种启动模式下的调用时机

    Activity启动模式 Intent Flags taskAffinity task和back stack总结 1 singleInstance模式 第一次进入 xff1a onCreate onStart 在栈顶再次进入 xff1a o
  • windows10 Ubuntu 双系统安装及美化详细步骤

    Windows 10 Ubuntu 双系统安装踩坑实录 写在前面背景介绍 硬件介绍安装 Ubuntu下载镜像文件 制作启动盘安装步骤 安装必备软件混凝土长方形实体逾越工具安装 Nvidia 显卡驱动远程连接工具即时通讯中文输入法 美化 Ub
  • 如何优雅地停止java程序

    方法一 span class token class name System span span class token punctuation span span class token function exit span span c
  • 删除数组里面的某一个值

    Array prototype remove span class token operator 61 span function span class token punctuation span val span class token
  • ASP.NET中实现点击不同菜单项,在当前页面显示其对应内容

    疑惑 xff1a 用ASP NET开发项目时 xff0c 若想要实现这样的界面 xff1a 顶部是导航栏 xff0c 有多个菜单项 xff0c 点击不同的菜单项后 xff0c 下方显示对应的内容页面 xff1b 或者是左侧是菜单栏 xff0
  • 解决error ‘XXX‘ is not defined no-undef且项目没有eslintrc.js文件问题

    问题描述 这是因为eslint的语法校验导致的问题 xff0c 文件是通过public的index html中 lt script src 61 34 xxxxxx js 34 gt lt script gt 引入的 xff0c 没有定义全
  • CentOS7 下MariaDB安装与简单配置(最新)

    前言 MySQL和MariaDB的区别 xff1a LAMP架构盛极一时 xff0c 这离不开MySQL的免费与易用 xff0c 但是在Oracle收购了Sun之后 xff0c 很多公司开始担忧MySQL的开源前景 xff0c 而最近Ora
  • JAVA基础知识(一)

    目录 1 java的数据类型类型之间的转换 xff08 自动转型 强制转型 特殊点 xff09 2 运算符2 1算术运算符2 2逻辑运算符2 3关系运算符2 4赋值运算符2 5三目运算符2 6位运算符 3 运算符的优先级4 表达式5 转义字
  • JAVA基础知识(二)

    目录 1 循环遍历2 排序算法2 1 冒泡排序2 2 选择排序2 3插入排序 3 数组的查找3 1顺序查找3 2二分查找 xff08 折半查找 xff09 4 Arrays工具类5 可变参数 1 循环遍历 JAVA中的常用的循环遍历有for
  • JAVA基础知识(三)

    目录 1 JAVA关键字1 1关键字 xff1a private1 2关键字 xff1a this1 3关键字 xff1a static1 4关键字 xff1a super1 5关键字 xff1a final 2 继承继承中的构造方法 3
  • JAVA基础知识(四)

    目录 1 抽象类 抽象方法2 接口interface3 多态4 对象转型5 内存分析6 设计原则7 单例设计模式 1 抽象类 抽象方法 1 抽象方法和抽象类必须使用abstract修饰符修饰 xff0c 有抽象方法的类只能被定义成抽象类 x
  • 基于mybatis-plus的代码自动生成工具(自定义模板)

    MyBatis Plus是一个MyBatis框架的增强工具 xff0c 在MyBatis的基础上只做增强不做改变 xff0c 为简化开发 提高效率而生 对于mybatis plus不了解的同学 xff0c 可以去MyBatis Plus官网
  • capabilities: ambient capabilities说明

    linux capability介绍 最早之前 xff0c linux对任务权限分为privileged processes xff08 UID等于0 xff0c 属于超级用户或者root用户 xff09 和unprivileged pro
  • 生死簿后台管理系统(有趣、放松下大脑)

    第一幕 xff1a 缘起 听说阎王爷要做个生死簿后台管理系统 xff0c 我们派去了一个程序员 996程序员做的梦 xff1a 第一场 xff1a 团队招募 为了应对地府管理危机 xff0c 阎王打算找 人 开发一套地府后台管理系统 xff
  • 年度最受欢迎的Python的书籍,还不来看看!

    Python是一种通用的解释型编程 xff0c 主要用于Web开发 机器学习和复杂数据分析 Python对初学者来说是一种完美的语言 xff0c 因为它易于学习和理解 xff0c 随着这种语言的普及 xff0c Python程序员的机会也越
  • 线程安全的实现方法

    1 互斥同步 互斥同步是一种常见也是最主要的并发正确性保障手段 xff0c 同步是指在多个线程并发访问共享数据时 xff0c 保证共享数据在同一个时刻只被线程使用 互斥实现方式有互斥量 xff0c 临界区 xff0c 信号量等手段 JAVA
  • CATIA卸载不完全,导致右击新建中有残留——注册表处理方法

    我通过计算机自带的 卸载程序 xff0c 卸载CATIA时 xff0c 出现 找不到指定文件 的情况 xff0c 又不想下载相关第三方软件 xff0c 遂尝试本地删除 首先删除安装目录下的文件 其次删除以下目录中的 Dassault Sys
  • BlackArch Linux安装VMware Tools教程

    BlackArch Linux安装VMware Tools教程 其实 xff0c 只要是Linux系统 xff0c 安装VMware Tools都是大同小异 xff0c 我曾经也给大家分享过一篇文章 xff1a VMware虚拟机 Linu
  • 二叉树的创建(C语言)

    树的基本性质和概念 1 p 61 q 43 1 其中p为顶点 xff0c q为边 2 结点的度 xff1a 子树的个数 xff0c 树的度 xff1a 结点度的最大值 3 连通且无圈 由于所有的树都可以转化为二叉树 xff0c 下列出二叉树

随机推荐