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

使用视图绑定替代 findViewById

→ ActivityAwesomeBinding.java) 布局文件中每一个带有 id 的视图都会在绑定对象中有一个对应的属性,这个属性将拥有正确的类型,并且空安全 视图绑定完美支持 Java...一个常见的错误用法是: 在开启了视图绑定的同时,依然在 setContentView(...) 中传入布局的 id 而不是绑定对象。...使用绑定对象编写安全性更佳的代码 findViewById 是许多用户可见 bug 的来源: 我们很容易传入一个布局中根本不存在的 id,从而导致空指针异常而崩溃;由于此方法类型不安全,也很容易使人写出像...空安全: 视图绑定会检测某个视图是不是只在一些配置下存在,并依据结果生成带有 @Nullable 注解的属性。所以即使在多种配置下定义的布局文件,视图绑定依然能够保证空安全。...在 ActivityAwesomeBinding.java 中,视图绑定生成了一个只有一个参数的 inflate 方法,该方法通过将 parent 设定为空值来指定当前视图不会绑定到父视图中;视图绑定也暴露了一个有三个参数的

1.6K30

干货|Kotlin入门第一课:从对比Java开始

,Kotlin采用默认访问修饰符public,而Java是private,如果kotlin也是private,那同样得定义一系列的set()/get(),不然在类外面无法通过对象获取属性。...如果Kotlin定义类时有参数列表,那么新建对象时必须传入形参值,不像Java有两种方式(1 先建一个无参对象,再通过set()来给属性赋值;2 直接通过参数列表创建对象)。...2.2变量空安全 不管是C++的指针,还是Java的引用,因指向对象为null导致的问题一直困扰着我们。Kotlin提供了一种安全机制,尽量减少变量在使用前是null的情况。...来访问属性是不明智的选择,好像”?”更稳妥一些? 毕竟后者在变量是否null的情况下都能做出相应的处理。我所能想到的需要用”!!”...3.总结 这篇文章主要是介绍Kotlin,给出目前较好的学习资源,通过数据类定义、变量空安全、类方法扩展及lambda表达式四个方面来和Java做了一个简单的比较,顺带提了Kotlin其他一些基础知识。

1K110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    四年Android面试遇到的问题整理

    当一个Drawable绑定到了View上,实际上这个View对象就会成为这个Drawable的一个callback成员变量,上面的例子中静态的sBackground持有TextView对象lable的引用...这条是很多人会犯的错误: Java中的Thread有一个特点就是她们都是直接被GC Root所引用,也就是说Dalvik虚拟机对所有被激活状态的线程都是持有强引用,导致GC永远都无法回收掉这些线程对象,...使用场景: 1.有多个对象可以处理同一个请求,具体哪个对象处理该请求待运行时再确定 2.在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。...本模式使得算法可独立于使用它的客户而变化。策略模式的使用场景:一个类定义了多种行为,并且这些行为在这个类的方法中以多个条件语句的形式出现,那么可以使用策略模式避免在类中使用大量的条件语句。...使用场景: 一个类定义了多种行为,并且这些行为在这个类的方法中以多个条件语句的形式出现,那么可以使用策略模式避免在类中使用大量的条件语句。

    57310

    Android谈谈封装那些事--BaseActivity和BaseFragment(一)

    上篇文章 Android自定义View–自己撸一个柱状图也没那么难 我说过会封装一套属于自己的库,争取在元旦之前发出来,作为新年礼物给自己,给大家。...那就不得不提到面向对象了,下面谈谈我自己的理解,不一定对,所以还请大家多多包涵指正: 首先:面向对象的根本本质是什么?简单的一句话,其实就是把属性和方法绑定到了一起,这句话该怎么理解呢?...举一个最简单的例子:我们在写一个activity的时候,我们可以把属性宏观理解为各种组件以及一些我们用的参数,然后把我们的处理业务逻辑的代码写到自己的方法中,基本上所有的类都是这样,属性-方法搞到一起,...在某些很简单的情况下,或许我们不使用多态也能开发出满足我们需要的程序,但大多数情况,如果没有多态,就会觉得代码极其难以维护。同时也补缺了Java中单继承的不足。...BaseEventActivity 我之前的项目中都用到了EventBus订阅/发布事件总线,代替了Intent,Handler,BroadCast在Fragment,Activity,Service,

    2.7K30

    Kotlin —— 这次入门就不用放弃了

    而Kotlin是空安全的,我们通过一个安全调用操作符?来明确地指定一个对象是否能为空。 我们可以像这样去写: // 这里不能通过编译....操作符 两种可能,要么正确返回name,要么抛出空指针异常 当user为null,你不想返回null,而是抛出一个空指针异常,你就可以使用它。 */ var name = user!!....先看Java,在Java中,实现一个单例,我们需要: 保留一个单例对象的静态实例 提供一个类方法让外界访问唯一的实例 构造方法采用private修饰符 而在Kotlin中,一个修饰符就解决了。...可能有人注意到了,还是需要findViewById啊!!骗子!说好的优雅呢?完全没觉得更加简洁啊!!别急,Kotlin常用的获取控件方式不是这样的,容我介绍个Kotlin库——Anko。...我们可以直接这样写 user.text="我是一个TextView" user就是我们布局文件声明的id,.text就相当于setText(),在Kotlin语言中,我们看不到了像Java中的set/

    1.7K30

    在 Microsoft Exchange 中搜索反序列化保护绕过 ( CVE-2022–21969)

    所以,这就是我在考虑反序列化的情况下查看 Rpc 函数时发现的。...我以为我做到了,但没有正确。这一刻,一种愤怒的情绪涌上心头,因为这不是我第一次“重新发现”旧的发现。但是,当我说:一个人在(重新)发现的每个阶段都会学习大量新事物时,请听我说,这也是最终重要的。...默认情况下 拒绝列表中有一个著名小工具的拼写错误,其他著名小工具也丢失了 因为这当然在我修补的 Exchange 实例中得到了修复,所以我想再次查看我们的 Rpc 反序列化代码。...为了证明我们的第一个条件是否strictMode = False适用于 Rpc 源,我编写了一个快速而肮脏的程序并在我的 Exchange 服务器上执行它。...阅读整个输出仔细发现,只有11人的94值导致strictMode被设置为True。好吧,这意味着绝大多数条目都相等False,因此在很多情况下,设计上都满足了“绕过条件 1” 。

    1.4K00

    关于setContentView方法

    转载请以链接形式标明出处: 本文出自:103style的博客 base on Android-29 文中相关的源码有删减 ---- 可以带着以下问题来看本文: 为什么从代码设置属性和主题,得在...如果 root 不为 null,则根据root生成适合的布局参数,如果当前 View 不附加到 root 上,则直接设置生成View得布局参数为根据root生成的布局参数。...inflate(layoutId, parent,true) 能正确显示我们设置的宽高是因为我们的View在设置 setLayoutParams 时 params = root.generateLayoutParams...---- 问题解答 Q:为什么从代码设置属性和主题,得在 setContentView 之前?...---- 参考文章 Android应用setContentView与LayoutInflater加载解析机制源码分析 ---- 以上 如果有描述错误的,请提醒我,感谢!

    44350

    Junit单元测试教程_单元测试调试react源码

    在程序中犯错误就像生活中犯错一样,错误不是一天两天而形成的。当需要改的时候,也不是能花少的时间而改掉的。这里我谈到的程序中的错误,就是著名的Bug。...有了测试的概念,这时候当我们做完项目的一个小模块,我们先去测试一下这个小模块是否正确或达到预期,如果错误或者没有达到预期就需要反复修改,直到正确或达到预期。这里所说的也就是使用了单元测试。...上一步骤为什么需要把测试过的数据注释掉呢? 答案来了,的确很麻烦,至于为什么注释掉,那是因为我们在写项目代码的时候,需要测试,不可能在同一个测试类测试这么多数据。...boolean condition) 检查条件是否为真 assertSame(java.lang.Object expected, java.lang.Object actual) 检查两个对象引用是否引用同一对象...如果我再其中加入一个算数异常会有怎么样的结果呢?如下: 在这里我们会发现,控制台变为了红色,并给出来报错信息。这证明了我们的程序测试后出现了问题。这仅是程序正确与失败的关系。

    72620

    Kotlin入门(22)适配器的简单优化

    到了列表视图ListView这里,与之搭档的一般是基本适配器BaseAdapter,这个BaseAdapter更不简单,基于它的列表适配器得重写好几个方法,还有那个想让初学者撞墙的ViewHolder。...实现的适配器类PlanetJavaAdapter,果真又冗长又晦涩,然而这段代码模版基本上是列表视图的标配,只要用Java编码,就必须依样画瓢。...这意味着,上面的控件对象必定是先获得实例,在它们被使用的时候肯定是非空的,因此完全可以告诉编译器,这些控件对象一定会在使用前赋值,编译器您老就高抬贵手,睁一只眼闭一只眼放行好了。...如此一来,这些控件在声明之时无需赋空值,在使用的时候也不必画蛇添足加上两个感叹号了。...翻到前面PlanetListAdapter的实现代码,认真观察发现控件对象的获取其实依赖于布局文件的视图对象view,既然如此,不妨把该视图对象作为ViewHolder的构造参数传过去,使得视图持有者在构造之时便能一块初始化内部控件

    1.4K10

    15. Kotlin 究竟该不该用 lateinit?

    因为被 lateinit 标记的变量,不再接受空安全检查,它的表现更像是一个普通的 Java 变量。...只要是符合以下条件,我就会使用 lateinit 修饰属性: 该属性在对象构造时无法初始化(缺少必要参数),在某个阶段被初始化之后会一直使用。...是代码逻辑结构不正确导致,如在某些情况下,上层在调用模块 init() 方法之前,就调用了模块的其他方法。此时抛出 UninitializedPropertyAccessException。...Kotlin 的 UninitializedPropertyAccessException本质上和 Java 的空指针错误是一样的,都是错误的估计此处对象不可能为空导致的。...在 Java 中我们通过增加一堆空判断来解决这个问题,Kotlin 可以使用 nullable 对象。 而 lateinit 通过舍弃空安全机制,把空安全交回到开发者手上(就像 Java 那样)。

    2K20

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

    ,可以通过打气筒把一个布局资源转换成一个view对象 // resource 就是我们定义的布局文件 // 第一种获取打气筒服务...Inflate(resId , parent,true )不仅能够正确的处理,而且已经把resId这个view加入到了parent,并且返回的是parent,和以上两者返回值有绝对的区别,还记得文章前面的例子上...提供支持是指 ArrayAdapter 关系到应该显示在屏幕上的数据集,例如,它可以关系到数组甚至数据列表。...当convertView为null的时候,创建一个ViewHolder对象,并将控件的实例都存放在ViewHolder里,然后调用View的setTag方法,将ViewHolder对象存储在View中,...这里一定要写view.findViewById,因为findViewById是有上下文的,默认是在Activity的主布局中,我们获取的子布局是view 如果不写view.findViewById而直接写

    2.2K10

    Android开发笔记(五十三)远程接口调用AIDL

    文件定义完成并且没有错误,则ADT会自动在gen目录下生成该aidl文件对应的java文件。...如果想在aidl方法中使用自定义数据结构,则需加上如下步骤: 1、把自定义数据结构的代码(如User.java)挪到aidl包下面,这个数据结构必须实现Parcelable接口; 2、在aidl...包下新建一个User.aidl文件,文件内容为“parcelable User;”;很简单,告诉aidl,我这里有个叫做User的parcelable对象; 3、在aidl接口定义中添加新的方法,并使用...即使User.java就在aidl目录下,那也得import,不然ADT不认这个对象;下面是补充后的文件定义例子: import com.example.exmprocess.aidl.data.User...1、定义一个ServiceConnection对象,在onServiceConnected方法中获取对方服务的实例。

    83730

    Android训练课程(Android Training) - 测试你的 Activity

    一个测试用例定义了一些对象和方法的集合,用于启动多样的彼此独立的测试。测试用例可以被组织进测试套件内和启动编程,以一个可重复的规则,测试框架提供了测试启动的方式。...要在Eclipse中设置你的测试装置: 在包管理器中( Package Explorer ),在你上次创建的测试用例的类上双击鼠标,将在 java编辑器中(Eclipse Java editor)打开这个文件...添加测试前置条件 (Add Test Preconditions) 作为明智的(sanity) 检查, 一个很好的实践就是验证测试装置是否被正确的配置好,和验证你要测试的对象是否被正确的实例化和初始化。...这意味着你的测试程序可以引用一个视图对象,但是如果它试图去更改那些对象的属性或者向UI线程发送事件,你通常会受到一个 WrongThreadException 错误。...和 你希望在屏幕上展示的视图对象。

    73500

    二、异常日志 (一) 异常处理

    (一) 异常处理 【强制】Java 类库中定义的可以通过预检查方式规避的RuntimeException异常不应该通过catch 的方式来处理,比如:NullPointerException,IndexOutOfBoundsException...正例:用户注册的场景中,如果用户输入非法字符,或用户名称已存在,或用户输入密码过于简单,在程序上作出分门别类的判断,并提示给用户。...【强制】有try块放到了事务代码中,catch异常后,如果需要回滚事务,一定要注意手动回滚事务。 【强制】finally块必须对资源对象、流对象进行关闭,有异常也要做try-catch。 ...说明:如果预期对方抛的是绣球,实际接到的是铅球,就会产生意外情况。 【推荐】方法的返回值可以为null,不强制返回空集合,或者空对象等,必须添加注释充分  说明什么情况下会返回null值。 ...2)如果不加栈信息,只是new自定义异常,加入自己的理解的error message,对于调用端解决问题的帮助不会太多。如果加了栈信息,在频繁调用出错的情况下,数据序列化和传输的性能损耗也是问题。

    48720

    安卓基础干货(四):安卓网络编程的学习

    ok,404 没有找到资源、503、509 服务器端错误 (2)解析服务器返回的二进制数据,解析成一个图片 (3)把图片显示在TextView上 示例代码: package com.itheima.htmlview...): 前提知识: 所有使用UI界面的操作系统,后台都运行着一个死循环,在不停的监听和接收用户发出的指令,一旦接收指令就立即执行。...,响应码:200 ok,404没有找到资源 ,503服务器端内部错误 4、把接收的二进制数据转换成图片 模版代码: 1、创建一个URL对象,打开一个HTTP连接 URL url = new URL..."/> 网络在主线程上的异常: android.os.NetworkOnMainThreadException 从Androi4.0开始,google更加UI界面运行的流畅性,强制要求访问网络的操作不能在主线程中进行...; return list; } } 4、把list里面的数据显示在listview 1、自定义一个数据适配器 private class MyAdapter extends BaseAdapter

    15K10

    论一个优秀的工程师应该如何做好异常处理和日志记录

    异常处理 Java类库中定义的可以通过预检查方式规避的RuntimeException异常不应该通过catch方式来处理: NullPointerException IndexOutofBoundsException...最外层的业务使用者,必须处理异常,将其转化为用户可以理解的内容 如果有try块放到了事务代码中 ,catch异常后,如果需要回滚事务,一定要注意手动回滚事务 finally块必须对资源对象,流对象进行关闭...,不会再执行try块中的return语句 捕获异常与抛出异常必须完全匹配,或者是抛异常的父类 方法的返回值可以为null,不强制返回空集合或者空对象等,必须添加注释充分说明什么情况下会返回null值...error message, 对于调用端解决问题的帮助不会太多.如果加了栈信息,在频繁调用出错的情况下,数据序列化和传输的性能损耗也是问题 避免出现重复的代码,即DRY(Don't Repeat Yourself...)原则: 重复的代码在以后的修改时,需要修改所有的副本,容易遗漏 抽取共性方法,或者抽象公共类,或者组件化 一个类中有多个public方法,都需要进行数行相同的参数校验工作,这个时候就要进行抽取:

    50920

    Android平台的Swift—Kotlin

    后面在语言新特性中会讲到。 ---------- 二、安全性 空安全:避免空指针异常。当变量可以为null时,必须使用可空安全符?进行声明,否则会出现编译错误。...而当在Java代码中调用Kotlin对象时,Kotlin生成的class文件也要输入到Java编译器,这时Java文件才能生成正确的class文件。...[14.png] 如果要在一个类里面声明静态成员,可以在类的内部使用伴生对象。...[16.png] ----- 二、新特性 1、空安全 Kotlin是如何实现空安全的呢? 在Kotlin中,对象声明分为可空引用和非空引用两种。...这就在编译期间杜绝了空指针异常。但是这里要注意一点,如果从Java返回的集合,不会强制做可空检查,这个是时候如果给不可空引用赋值Java集合中的null会出现转换错误异常。

    3.5K90

    Java常见的几大代码

    有一点要注意,如果字符串没有包含任何方法改变它的值的时候,你最好将它作为值来传递。 5、写一个空的异常处理 我知道一个空的异常处理就像忽略错误一样很诱人。...如果你以这样的形式来定义你的变量名和类名,你就是在有意识的使他们走向正确,你就能逐渐的减少这样的错误的数量。这可能需要一段时间,但是在以后有可能会避免更为严重的错误。...空指针错误的原因是多种多样的,但是一般情况下发生这种错误意味着你没有对一个对象初始化,或者是你没有检查一个函数的返回值。 许多函数返回一个空是用来指示一个错误的条件被执行。...既然原因是一个错误的条件,一般的测试就不会发现它,这就意味着你的用户可能在最后的时候替你发现它。如果API函数指明一个空的对象很可能被返回,那在使用对象的引用之前一定要进行检查。...另外的原因可能是你在初始化对象的时候不规范,或者是它的初始化是有条件的。举例,检查下面的代码,看看你是否能发现这个错误。

    41830

    【已解决】Python 中 AttributeError: ‘NoneType‘ object has no attribute ‘X‘ 报错

    同时结合人工智能GPT排除可能得隐患及错误。 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。...同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深度学习从0到1系列文章 一、Bug描述 在Python编程中,AttributeError是一个常见的错误,它通常发生在尝试访问一个对象的属性或方法时...二、定位报错原因 原因一: 返回None的函数调用 如果一个函数预期应该返回一个对象,但实际上返回了None,然后我们尝试访问这个返回值的属性,就会引发这个错误。...None,没有属性x 原因二:错误的变量初始化 在某些情况下,变量可能没有被正确初始化,或者被错误地设置为None。...在类型判断错误的情况下,可能会错误地假设一个None类型的变量是另一个类型的对象。

    2.9K20
    领券