Kotlinx不使用findViewById的原理

Kotlin-android-extensions插件允许开发者直接使用XML中定义的控件名,简化了原生Android页面开发中的控件操作。通过反编译查看Java代码,发现Kotlin实际上是通过findCachedViewById方法缓存了查找的View,首次使用时调用findViewById,后续则从缓存中获取,减少重复查找。在Fragment中,控件操作应在onViewCreated而非onCreateView中进行,因为onCreateView时mView尚未初始化完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原生页面的开发有一个让人头疼的地方:页面中控件非常多,堆砌了大量的控件声明与控件绑定代码。很明显,这属于我们想要避免的重复劳动。

而正好,Kotlin给我们提供了一个解决方法,kotlin-android-extensions,在app/build.gradle中加入下面两句即可:

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

引入了kotlin-android-extensions后,控件的使用就变得非常简洁了,在代码中直接使用xml中定义的控件名即可。

接下来要思考的问题是,为什么可以直接使用控件名去操作控件,而不用再显式地使用findViewById。

我们可以反编译Kotlin代码,查看其对应的Java代码来一探究竟:

首先在Android Studio中,点击顶部的Tools -> Kotlin,然后选择Show Kotlin Bytecode,这样在右侧就打开了Koltin代码对应的字节码,接下来,点击字节码界面左上方的Decompile,就得到了Kotlin代码对应的Java代码。

可以看到,et_account控件操作对应的代码是:

我们再看一下这个findCachedViewById方法:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值