20.kotlin-android-extensions插件(虽然as4.1之后已废弃,但是还是有必要讲一下)
使用该插件后,无需繁琐的findViewById()
根目录下的build.gradle添加对应版本的kotlin-android-extensions
在项目中需用的主模块app/build.gradle应用kotlin-android-extensions
插件
下面进行使用,在一个xml中有个bt按钮,点击后toask,ef:
<Button
android:id="@+id/bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
package com.hhz.myapplication.iml10
//引入对应xml资源,一般在编写对应的id时通过代码补全自动导包
import kotlinx.android.synthetic.main.activity_mainkt.*
class MainKtActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_mainkt)
//无需findViewById了,编写bt代码补全自动导包引入对应xml
bt.setOnClickListener{
Toast.makeText(this@MainKtActivity,"success",Toast.LENGTH_SHORT).show()
}
}
}
但是android studio 4.1之后会发现不自动引入了,google也不建议,原因:实质是 用HashMap缓存读取id 增加内存开销,详情如下ef:
//kt代码
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewToShowText.text = "Hello"
}
}
//反编译后,转成java
public final class MainActivity extends AppCompatActivity {
private HashMap _$_findViewCache;
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(1300023);
//_$_findCachedViewById()是由kotlin-android-extensions插件自动生成
//_$_findCachedViewById这种奇怪的命名方式是为防止和开发者定义的函数名冲突
TextView var