我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ViewBinding怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ViewBinding怎么使用

本文小编为大家详细介绍“ViewBinding怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“ViewBinding怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    视图绑定

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

    设置说明

    注意:视图绑定在 Android Studio 3.6 Canary 11 及更高版本中可用。

    视图绑定功能可按模块启用。要在某个模块中启用视图绑定,请将 viewBinding 元素添加到其 build.gradle 文件中,如下例所示:

    android {    ...    viewBinding {        enabled = true    }}

    然而,在后续的as版本中这个引用又变了,不然build可能报错,需要如下引用才行:

    android {buildFeatures{viewBinding true}}

    如果您希望在生成绑定类时忽略某个布局文件,请将 tools:viewBindingIgnore=“true” 属性添加到相应布局文件的根视图中:

    <LinearLayout        ...        tools:viewBindingIgnore="true" >    ...</LinearLayout>

    用法

    为某个模块启用视图绑定功能后,系统会为该模块中包含的每个 XML 布局文件生成一个绑定类。每个绑定类均包含对根视图以及具有 ID 的所有视图的引用。系统会通过以下方式生成绑定类的名称:将 XML 文件的名称转换为驼峰式大小写,并在末尾添加“Binding”一词。

    例如,假设某个布局文件的名称为 result_profile.xml

    <LinearLayout ... >        <TextView android:id="@+id/name" />        <ImageView android:cropToPadding="true" />        <Button android:id="@+id/button"            android:background="@drawable/rounded_button" />    </LinearLayout>

    所生成的绑定类的名称就为 ResultProfileBinding。此类具有两个字段:一个是名为 nameTextView,另一个是名为 buttonButton。该布局中的 ImageView 没有 ID,因此绑定类中不存在对它的引用。

    每个绑定类还包含一个 getRoot() 方法,用于为相应布局文件的根视图提供直接引用。在此示例中,ResultProfileBinding 类中的 getRoot() 方法会返回 LinearLayout 根视图。

    以下几个部分介绍了生成的绑定类在 Activity 和 Fragment 中的使用。

    在 Activity 中使用视图绑定

    如需设置绑定类的实例以供 Activity 使用,请在 Activity 的 onCreate() 方法中执行以下步骤:

    • 调用生成的绑定类中包含的静态 inflate() 方法。此操作会创建该绑定类的实例以供 Activity 使用。

    • 通过调用 getRoot() 方法或使用 Kotlin 属性语法获取对根视图的引用。

    • 将根视图传递到 setContentView(),使其成为屏幕上的活动视图。

       private lateinit var binding: ResultProfileBinding   override fun onCreate(savedInstanceState: Bundle) {       super.onCreate(savedInstanceState)       binding = ResultProfileBinding.inflate(layoutInflater)       val view = binding.root       setContentView(view)   }

    您现在即可使用该绑定类的实例来引用任何视图:

        binding.name.text = viewModel.name    binding.button.setOnClickListener { viewModel.userClicked() }

    在 Fragment 中使用视图绑定

    如需设置绑定类的实例以供 Fragment 使用,请在 Fragment 的 onCreateView() 方法中执行以下步骤:

    • 调用生成的绑定类中包含的静态 inflate() 方法。此操作会创建该绑定类的实例以供 Fragment 使用。

    • 通过调用 getRoot() 方法或使用 Kotlin 属性语法获取对根视图的引用。

    • 从 onCreateView() 方法返回根视图,使其成为屏幕上的活动视图。

    注意:inflate() 方法会要求您传入布局膨胀器。如果布局已膨胀,您可以调用绑定类的静态 bind() 方法。如需了解详情,请查看视图绑定 GitHub 示例中的例子。

        private var _binding: ResultProfileBinding? = null    // This property is only valid between onCreateView and    // onDestroyView.    private val binding get() = _binding!!    override fun onCreateView(        inflater: LayoutInflater,        container: ViewGroup?,        savedInstanceState: Bundle?    ): View? {        _binding = ResultProfileBinding.inflate(inflater, container, false)        val view = binding.root        return view    }    override fun onDestroyView() {        super.onDestroyView()        _binding = null    }

    您现在即可使用该绑定类的实例来引用任何视图:

        binding.name.text = viewModel.name    binding.button.setOnClickListener { viewModel.userClicked() }

    注意:Fragment 的存在时间比其视图长。请务必在 Fragment 的 onDestroyView() 方法中清除对绑定类实例的所有引用。

    GitHub示例如下代码所示:

    class BindFragment : Fragment(R.layout.fragment_blank) {    // Scoped to the lifecycle of the fragment's view (between onCreateView and onDestroyView)    private var fragmentBlankBinding: FragmentBlankBinding? = null    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {        super.onViewCreated(view, savedInstanceState)        val binding = FragmentBlankBinding.bind(view)        fragmentBlankBinding = binding        binding.textViewFragment.text = getString(string.hello_from_vb_bindfragment)    }    override fun onDestroyView() {        // Consider not storing the binding instance in a field, if not needed.        fragmentBlankBinding = null        super.onDestroyView()    }}

    与 findViewById 的区别

    与使用 findViewById 相比,视图绑定具有一些很显著的优点:

    • Null 安全:由于视图绑定会创建对视图的直接引用,因此不存在因视图 ID 无效而引发 Null 指针异常的风险。此外,如果视图仅出现在布局的某些配置中,则绑定类中包含其引用的字段会使用 @Nullable 标记。

    • 类型安全:每个绑定类中的字段均具有与它们在 XML 文件中引用的视图相匹配的类型。这意味着不存在发生类转换异常的风险。

    这些差异意味着布局和代码之间的不兼容将会导致构建在编译时(而非运行时)失败。

    与数据绑定的对比

    视图绑定和数据绑定均会生成可用于直接引用视图的绑定类。但是,视图绑定旨在处理更简单的用例,与数据绑定相比,具有以下优势:

    • 更快的编译速度:视图绑定不需要处理注释,因此编译时间更短。

    • 易于使用:视图绑定不需要特别标记的 XML 布局文件,因此在应用中采用速度更快。在模块中启用视图绑定后,它会自动应用于该模块的所有布局。

    反过来,与数据绑定相比,视图绑定也具有以下限制:

    • 视图绑定不支持布局变量或布局表达式,因此不能用于直接在 XML 布局文件中声明动态界面内容。

    • 视图绑定不支持双向数据绑定。

    考虑到这些因素,在某些情况下,最好在项目中同时使用视图绑定和数据绑定。您可以在需要高级功能的布局中使用数据绑定,而在不需要高级功能的布局中使用视图绑定。

    读到这里,这篇“ViewBinding怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    ViewBinding怎么使用

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    ViewBinding怎么使用

    本文小编为大家详细介绍“ViewBinding怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“ViewBinding怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。视图绑定通过视图绑定功能,您可以更
    2023-07-05

    ViewBinding怎么在Android中使用

    ViewBinding怎么在Android中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。ViewBinding 有什么作用过于冗余findViewById
    2023-06-15

    Android视图绑定viewBinding如何使用

    本文小编为大家详细介绍“Android视图绑定viewBinding如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android视图绑定viewBinding如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习
    2023-07-05

    Android视图绑定viewBinding的使用介绍

    最近这段时间在学习Kotlin,突然发现谷歌已经把kotlin-android-extensions插件废弃,目前推荐使用ViewBinding来进行替代,接下来通过本文给大家分享Android使用ViewBinding的详细步骤,感兴趣的朋友一起学习吧
    2023-01-28

    Android Studio3.6新特性之视图绑定ViewBinding使用指南

    View Binding是一项功能,使您可以更轻松地编写与视图交互的代码。在模块中启用视图绑定后,它将为该模块中存在的每个XML布局文件生成一个绑定类。绑定类的实例包含对在相应布局中具有ID的所有视图的直接引用。 正文 Android St
    2022-06-07

    Android开发Viewbinding委托怎么实现

    本篇内容介绍了“Android开发Viewbinding委托怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!从Crash到有意思的源码
    2023-07-02

    Android Studio3.6新特性:视图绑定ViewBinding使用指南(Java版例程)

    视图绑定ViewBinding使用指南(Java版)修改build.gradle修改java代码注意事项工程代码 Android Studio 3.6 Canary 11 及更高版本中推出了ViewBinding功能,ViewBinding
    2022-06-06
    2024-04-02
    2024-04-02

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录