iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Android视图绑定viewBinding如何使用
  • 249
分享到

Android视图绑定viewBinding如何使用

2023-07-05 01:07:58 249人浏览 薄情痞子
摘要

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

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

Google 在 Android Studio 3.6 Canary 11 及更高版本中提供了一个 viewBinding 的开关,可以开启视图绑定功能,以此来替代 findViewById

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

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

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

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

为某个模块启用视图绑定功能后,系统会为该模块中包含的每个 XML 布局文件生成一个绑定类。每个绑定类均包含对根View以及具有 ID 的所有View的引用。系统会通过以下方式生成绑定类的名称:将 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() 方法,用于为相应布局文件的根View提供直接引用。在此示例中,ResultProfileBinding 类中的 getRoot() 方法会返回 LinearLayout 根视图。

在 Activity 中使用 viewBinding

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

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

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

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

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

然后即可使用该绑定类的实例来引用任何View控件:

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

在Fragment中使用viewBinding

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

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

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

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

    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    }

然后即可使用该绑定类的实例来引用任何View控件:

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

注意:inflate() 方法会要求传入LayoutInflater对象。如果布局已经inflated,则可以调用绑定类的静态 bind() 方法。 例如:

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()    }}

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

与findViewById的区别

与使用 findViewById 相比,viewBinding具有一些很显著的优点:

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

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

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

与dataBinding的对比

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

  • 更快的编译速度:viewBinding不需要处理注解,因此编译时间更短。

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

反过来,与 dataBinding 相比,viewBinding 也具有以下限制:

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

  • viewBinding不支持双向数据绑定。

替代 KAE

viewBinding 还有一个重要作用是替代以前的 Kotlin Android Extensions,在之前的kotlin版本中提供了一个针对android的扩展插件,它可以允许我们直接用布局文件中的 view id 来访问 view,也无需写 findViewById。

但是由于 KAE 存在一些潜在的 bug (例如可以访问到不属于当前Activity布局的view id造成空指针异常等), 从 Kotlin 1.7 开始,KAE被正式移除了。那么 viewBinding 的出现也是为了弥补之前 KAE 的功能和缺陷。

读到这里,这篇“Android视图绑定viewBinding如何使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: Android视图绑定viewBinding如何使用

本文链接: https://www.lsjlt.com/news/348834.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Android视图绑定viewBinding如何使用
    本文小编为大家详细介绍“Android视图绑定viewBinding如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android视图绑定viewBinding如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习...
    99+
    2023-07-05
  • Android视图绑定viewBinding的使用介绍
    目录在 Activity 中使用 viewBinding在Fragment中使用viewBinding与findViewById的区别与dataBinding的对比替代 KAEGoo...
    99+
    2023-01-28
    Android视图绑定viewBinding Android视图绑定 Android viewBinding
  • Android视图绑定方法深入探究
    目录视图绑定原理优点(相比于findViewById)与数据绑定的对比使用视图绑定视图绑定 用于替代findViewById的方式获取id元素, google推荐使用 原理 启用视图...
    99+
    2023-01-30
    Android视图绑定 Android视图绑定的使用
  • 如何使用nginx绑定域名
    nginx绑定域名的方法:1.在nginx安装目录打开nginx.conf配置文件;2.在文件中将server_name的值修改为需要绑定的域名即可;在nginx中绑定域名的方法首先,在计算机中进入到nginx安装目录,并查看到nginx....
    99+
    2024-04-02
  • 如何使用域名绑定ip
    将域名与ip进行绑定的方法:1.进入域名代理商网站,登录域名管理控制台;2.点击左侧菜单栏“域名管理”选项;3.选择需要绑定ip的域名,点击“管理”;4.选择“域名解析”,点击“添加解析”按钮;5.添加一个记录类型为“a记录”,主机记录为“...
    99+
    2024-04-02
  • Android中如何使用异步线程更新UI视图
    这篇文章主要为大家展示了“Android中如何使用异步线程更新UI视图”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android中如何使用异步线程更新UI视图”这篇文章吧。在Android中子...
    99+
    2023-05-30
    android
  • SpringMVC参数绑定之视图传参到控制器如何实现
    本篇内容主要讲解“SpringMVC参数绑定之视图传参到控制器如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringMVC参数绑定之视图传参到控制器如何实现”吧!基本类型做形式参数(...
    99+
    2023-07-05
  • MYSQL中视图如何使用
    MYSQL中视图如何使用?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!1、什么是视图执行一条SQL,将结果集保存在一张虚拟...
    99+
    2024-04-02
  • Xamarin XAML语言中如何使用ContentView视图作为自定义视图的父类
    这篇文章主要介绍Xamarin XAML语言中如何使用ContentView视图作为自定义视图的父类,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!自定义视图的父类:ContentView视图可以作为自定义视图的父类。...
    99+
    2023-06-04
  • Oracle中如何使用user_视图
    这篇文章给大家介绍Oracle中如何使用user_视图,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。数据字典相关连接:Oracle数据字典:常用字典表存储关于关联数据库的信息,只有 O...
    99+
    2024-04-02
  • win10任务视图如何使用
    本文小编为大家详细介绍“win10任务视图如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“win10任务视图如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。win10任务视图使用方法:在任务栏中单机...
    99+
    2023-07-02
  • Oracle中如何使用all_视图
    Oracle中如何使用all_视图,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。数据字典相关连接:Oracle数据字典:常用字典Oracle数...
    99+
    2024-04-02
  • Oracle中如何使用dba_视图
    Oracle中如何使用dba_视图,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。数据字典相关连接:Oracle数据字典:常用字...
    99+
    2024-04-02
  • 如何使用nginx绑定域名访问
    使用nginx绑定域名访问的示例:打开nginx配置文件。找到server_name的值修改为域名即可。server {listen 80;server_name yisu.com; #域名client_max_body_size 5M;g...
    99+
    2024-04-02
  • SQL Developer中如何使用绑定变量
    这篇文章将为大家详细讲解有关SQL Developer中如何使用绑定变量,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 Toad是个强大的工...
    99+
    2024-04-02
  • 如何使用host文件绑定域名
    在host文件中绑定域名的方法:1.在计算机系统盘中打开hosts文件;2.根据原有格式添加需要绑定的域名,保存即可;在host文件中绑定域名的方法首先,在计算机中打开系统磁盘;系统磁盘打开后,在磁盘中查找到查找到“hosts”文件,hos...
    99+
    2024-04-02
  • 如何使用域名绑定8080端口
    iis将域名绑定8080端口的方法:1.在计算机打开iis管理器;2.右键点击“网站”选择“添加网站”选项;3.填写网站名称和页面路径;4.将端口修改为8080端口;5.在主机名中填写需要绑定的网站域名,确认即可;在iis中将域名绑定808...
    99+
    2024-04-02
  • 如何在vue中动态绑定图标
    本篇文章为大家展示了如何在vue中动态绑定图标,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1 安装svg使用管理员身份运行cmd窗口,切换到项目目录下执行。npm add sv...
    99+
    2023-06-15
  • MySQL如何创建和使用视图
    MySQL中可以通过CREATE VIEW语句来创建视图,视图是一个虚拟的表,它是根据SELECT语句的结果集生成的。 创建...
    99+
    2024-03-06
    MySQL
  • 如何创建和使用MySQL视图
    如何创建和使用MySQL视图? MySQL是一种流行的关系型数据库管理系统,它允许用户创建视图来简化复杂的查询操作并提高查询的效率。视图是通过查询语句创建的虚拟表,可以像普通表一样使用...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作