首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android Studio 3.6中使用视图绑定替代 findViewById方法

ActivityAwesomeBinding.java) 布局文件中每一个带有 id 视图都会在绑定对象中有一个对应属性,这个属性将拥有正确类型,并且空安全 视图绑定完美支持 Java 和 Kotlin...为了解决这些问题,视图绑定把 findViewById 替换成了更加简洁和安全实现。 视图绑定有下面两个特性: 类型安全: 因为视图绑定总是会基于布局中视图生成类型正确属性。...可以看到它们都是类型安全以及空安全 视图绑定会根据每个拥有 id 视图生成类型正确属性。他也会为根布局生成 rootView 属性并通过 getRoot 暴露给您。...视图绑定没有添加任何额外逻辑,他只是把视图属性暴露给您,从而帮您在不使用 findViewById 情况下也能调用它们。这样一来便保证了生成文件简洁性(当然也避免了拖慢构建速度)。...如果您正在使用 Kotlin,视图绑定生成类也已经对互操作进行了优化。通过 @Nullable 和 @NonNull 注解使用,Kolin 可以正确将属性暴露为空安全类型

2.4K31
您找到你想要的搜索结果了吗?
是的
没有找到

使用视图绑定替代 findViewById

→ ActivityAwesomeBinding.java) 布局文件中每一个带有 id 视图都会在绑定对象中有一个对应属性,这个属性将拥有正确类型,并且空安全 视图绑定完美支持 Java...为了解决这些问题,视图绑定把 findViewById 替换成了更加简洁和安全实现。 视图绑定有下面两个特性: 类型安全: 因为视图绑定总是会基于布局中视图生成类型正确属性。...可以看到它们都是类型安全以及空安全 视图绑定会根据每个拥有 id 视图生成类型正确属性。他也会为根布局生成 rootView 属性并通过 getRoot 暴露给您。...视图绑定没有添加任何额外逻辑,他只是把视图属性暴露给您,从而帮您在不使用 findViewById 情况下也能调用它们。这样一来便保证了生成文件简洁性(当然也避免了拖慢构建速度)。...如果您正在使用 Kotlin,视图绑定生成类也已经对互操作进行了优化。通过 @Nullable 和 @NonNull 注解使用,Kolin 可以正确将属性暴露为空安全类型

1.6K30

android学习笔记----关于findViewById那些事

为了在应用运行时能与这些视图进行交互并且修改它们,例如修改文本或者修改按钮,那么我们需要找到 Java 对象,一旦我们找到它们,我们可以在 MainActivity 中用引用指向它们,记住,我们没有创建新...,并且传入一个资源 id,findViewById 方法会找到与传入 id 相对应 View,Activity 在 XML 视图层次结构中搜索这个视图,再在 onCreate 方法中处理它,这个...然后 findViewById 方法遍历它,找到那个视图层次结构中某个 View,这个方法返回值是 View 类型对象。...= findViewById(R.id.textview); 又报错了,说类型不兼容,我们需要一个 TextView 类型,但这是一个 View 对象,因为 findViewById 返回值是 View...是 View 类中一个方法,所以这是一个有效调用,没有必要转化成 TextView 格式,因为我们调用方法是 View 类,如果我们想要调用 TextView 类方法就需要类型转换了。

29010

Android开发笔记(六十六)自定义对话框

setItems : 设置Spinner方式内容视图。窗口显示与对话框模式Spinner极为相似,没有底部按钮,一旦选中某项就立即关闭对话框。...其实不光Dialog,连Activity都是以Window为基础,如果没有Window,Activity根本没法把视图展示在手机上。...getCurrentFocus : 获取当前焦点所在视图findViewById : 根据资源ID获取该视图对象。...这个似乎也在哪里见过,看看这里有没有《Android开发笔记(二十)顶部导航栏ActionBar》,原来ActivityrequestWindowFeature方法也用了Window:getWindow...因为Service没有窗口,只能借用系统警告来弹窗,同时TYPE_SYSTEM_ALERT类型还得加上如下权限: <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW

2.4K20

Android Studio 3.6中新视图绑定工具ViewBinding 用法详解

在此示例中,ActivityMainBinding 类中 getRoot() 方法会返回 LinearLayout 根视图。...相比较于 findViewById 和 Butter Knife两种方式还是方便很多。而且 ViewBinding 在使用过程中不存在类型转换以及空指针异常问题。因为在绑定类中已经全部定义好了。...补充:与findViewById区别 与使用findViewById相比,视图绑定具有重要优势: •空安全性:由于视图绑定会创建对视图直接引用,因此不会因无效视图ID而导致空指针异常风险。...此外,当视图仅在布局某些配置中存在时,在绑定类中包含其引用字段将用@Nullable •类型安全性:每个绑定类中字段具有与其在XML文件中引用视图匹配类型。...这意味着没有类强制转换异常风险。 这些差异意味着布局和代码之间不兼容性将导致编译在编译时而不是在运行时失败。

1.5K20

Android Studio3.6中View Binding初探及用法区别

在模块中启用视图绑定后,它将为该模块中存在每个XML布局文件生成一个绑定类。绑定类实例包含对在相应布局中具有ID所有视图直接引用。 在大多数情况下,视图绑定替换findViewById。...此类有两个字段:一个名为nameTextView和一个名为buttonButton。 布局中ImageView没有ID,因此在绑定类中没有对其引用。 ​...每个绑定类还包括一个getRoot()方法,为相应布局文件视图提供直接引用。 在此示例中,ResultProfileBinding类中getRoot()方法返回LinearLayout根视图。...区别 与使用findViewById相比,视图绑定具有重要优势: •空安全性:由于视图绑定会创建对视图直接引用,因此不会因无效视图ID而导致空指针异常风险。...此外,当视图仅在布局某些配置中存在时,在绑定类中包含其引用字段将用@Nullable •类型安全性:每个绑定类中字段具有与其在XML文件中引用视图匹配类型

69642

RxBinding详解: 规范而强大安卓UI响应式编程

一段时间后,你fragment或者activity中由于各种匿名类而显得十分混乱。这时,如果你想再为该类中控件/视图添加由其它视图触发响应事件,那将变得非常复杂。...让我们来看一下这个例子: 假设你想察看一个EditText输入文字时文本变化(查看指定类型数据)。...EditText原始文本类型是CharSequence,而你要获取倒序String类型文本,你可以这样: final TextView nameLabel = (TextView) findViewById...observable 被map() operator 转换成了返回值为String observable,然后 subscription 将String类型值显示在nameLabel上。....* 包内视图与控件对应RxBinding在com.jakewharton.rxbinding.widget.*包内。 RxBinding对不同平台没有局限。

2.9K40

2-VI--ListView基本使用及优化

注意:在使用之前,你应该检查一下这个View是非空并且是何时类型 If it is not possible to convert this view to display the correct...如果它果不能转换这个视图来显示正确数据,这个方法能创建一个新View Heterogeneous lists can specify their number of view types, so that...this View is always of the right type 不均匀列表可以指定它们视图类型数量,因此这个视图总是正确类型 2.修改:MyListViewAdapter#getView...ViewHolder干嘛,convertView之后已经很好了啊 现在明白:每个item创建都会执行getView方法,findViewById就会执行一次,200000条数据就会有200000次...而一次findViewById结果是不变,没必要多查199999次。

45110

Now in Android | 11 月刊 · 2019

组织代码其实有点像做家务: 最初,一切都是各就各位,几年后,装黄油盘子就会出现在书架上、订书机会和装糖碗放在一起、过节日时挂起来各种装饰永远不会被撤下来,因为没有别的地方可以放。...在深受困扰开发者们看来,Android 开发中不断出现样板代码中最恼人就是 findViewById()。每当您要引用层次结构中视图时,都必须使用正确视图 ID,并重复输入类型信息。...) // or even var b = findViewById(R.id.button23) as Button 单独看起来,需要代码量并不很多,但是当您必须对每个视图都这么处理时候,这个工作量就不能视若无睹了...视图绑定更接近数据绑定,从而避免了 ButterKnife 注解处理方法。用 Jake 的话说,"这是 findViewById 和完整数据绑定中间地带。"...△ 使用正确权限和 MediaStore API 来让您 Android 10 应用访问由其他应用创建内容 我们准备了详细文档,涵盖了处理外部存储文件 API 和做法。

61840

笔记42 | Android加载器Adapter深入学习篇(一)

方法获得布局视图 2.我们一般会Inflate一个新View,填充数据并返回显示 如果我们Item很多话,Android中有个叫做Recycler构件,无论数据中是多少个item,在显示上Recycler...,从简单单字符类型,到多字符类型,再到有button类型,当一个listview需要加载各种不同item时,就需要getItemViewType和getViewTypeCount这两个BaseAdapter...//返回由getView创建视图类型数量。每种类型都表示可以在getView中转换一组视图。...int getViewTypeCount() { return super.getViewTypeCount(); } 和 //获取将由getView为指定项目创建视图类型...---- 实现步骤 首先我们需要为不同Item设置不同数值,int值,因为getItemViewType返回是int值,所以需定义成int,必须从0开始,依次递增。

57340

Widget中state到底是什么

StatefulWidget场景已经完全覆盖了StatelessWidget,因此我们在构建界面时,往往会大量使用StatefulWidget来处理静态视图展示需求,看起来似乎也没什么问题。...在今天这篇文章中,我将着重介绍这两种类型区别,从而帮我们更好地理解Widget,掌握不同类型Widget正确使用时机。...然而,不同是,Image类并没有build方法来创建视图,而是通过creatState方法创建了一个类型为_ImageStateState对象,然后由这个对象负责视图构建。...从定义来看,StatefulWidget似乎是万能,替代StatelessWidget看起来合情合理。于是StatefulWidget滥用,也容易因此变得顺理成章,难以避免。...因此,正确评估你视图展示需求,避免无谓StatefulWidget使用,是提高Flutter应用渲染性能最简单也是最直接手段。

2.9K20

Android开发-Listview中显示不同视图布局

convertView在Item为单一同种类型布局时,能够回收并重用,但是多个Item布局类型不同时,convertView回收和重用会出现问题。...比如有些行为纯文本,有些行则是图文混排,这里纯文本行为一类布局,图文混排行为第二类布局。单一类型ListView很简单,下面着重介绍一下ListView包含多种类型视图布局情形。...2.ListView包含不同Item布局 我们需要做这些工作:   1)重写 getViewTypeCount() – 该方法返回多少个不同布局   2)重写 getItemViewType...(int) – 根据position返回相应Item   3)根据view item类型,在getView中创建正确convertView 3.案例 import java.util.ArrayList...(R.id.textview3);           holder3.imageView = (ImageView)convertView.findViewById(R.id.imageview);

2.2K30

Android 使用View Binding方法详解

之前我们与视图交互方式有findViewById、kotlin中引入Android Kotlin Extensions后直接通过id进行访问。前者模板化严重,重复代码多;后者最为方便。...绑定类实例包含对在相应布局中具有 ID 所有视图直接引用。 在大多数情况下,视图绑定会替代 findViewById。 使用 View Binding可按模块启用。...每个绑定类均包含对根视图以及具有id 所有视图引用。绑定类类名是xml名称后面加“Binding”。...这个类有两个成员变量tvName和btnOpen,还包含一个getRoot()方法,返回视图,此例中返回LinearLayout。 要获取绑定类实例,可以通过静态 inflate() 方法。...区别:空安全和类型安全,不存在因引用了一个错误id而导致空指针异常或者类型转换异常。

1.7K41

android学习笔记----ListView和各种适配器简介

Inflate(resId , parent,true )不仅能够正确处理,而且已经把resId这个view加入到了parent,并且返回是parent,和以上两者返回值有绝对区别,还记得文章前面的例子上...ArrayAdapter具有说明来告诉它自己如何创建列表项视图,并返回给ListView,当屏幕被占满后 ListView 将停止向ArrayAdapter 寻求更多列表项,列表项视图仅在需要时才创建...,当视图被滚动离开屏幕后,它们就会被添加到Scrap Pile,比如前两个列表项不再可见,它们将进入 Scrap Pile,然后当我们请求新列表项时,我们可以通过将这些视图返回到 ArrayAdapter...view View:AdapterView中被单击视图(这将是适配器提供视图) position int:适配器中视图位置。 id long:已单击行ID。...这里一定要写view.findViewById,因为findViewById是有上下文,默认是在Activity主布局中,我们获取子布局是view 如果不写view.findViewById而直接写

2.1K10

Mono for Android 实现高效导航

Mono for Android 实现高效导航 Android 4.0 系统定义了一系列高效导航方式 (Effective Navigation), 主要包括标签、下拉列表、以及向上和返回等, 本文介绍如何用...点击图标返回应用程序上一级 Activity , 注意是上一级 Activity , 不是上一个 Activity , 关于向上与返回区别, 可以看看 Android SDK 中 Providing...Ancestral and Temporal Navigation 一文, 将向上和返回讲解非常清楚, 在这里只讨论 Mono for Android 实现方式。...按钮显示为向上, 提示用户点击这个按钮可以返回应用程序上一级。...var upIntent = new Intent(this, typeof(MainActivity)); // 使用 Suport Package 中 NavUtils 来正确处理向上导航

72811

ViewBinding 与 Kotlin 委托双剑合璧

findViewById、ButterKnife 和 Kotlin Synthetics 在这方面表现较差; 3、编译速度: findViewById 编译速度是最快,而 ButterKnife 和...可以看到,并没有一种绝对优势方法,但越往后整体效果是有提升。另外,❓是什么呢?...答:Activity 实例和 Activity 视图生命周期是同步,而 Fragment 实例和 Fragment 视图生命周期并不是完全同步,因此需要在 Fragment 视图销毁时,手动回收绑定类对象...例如:detach Fragment,或者 remove Fragment 并且事务进入返回栈,此时 Fragment 视图销毁但 Fragment 实例存在。...那么,有没有可优化方案呢?我们想起了 Kotlin 属性委托,关于 Kotlin 委托机制在我之前一篇文章里讨论过:Kotlin | 委托机制 & 原理[7]。

1.6K20
领券