在新构建的猜歌名项目中,android主要采用kotlin开发;小伙伴使用了之前我没见过的一些方式对View处理,采用ViewBinding模式;
代码剖析刚好可以回顾一下kotlin的代码,对相关语法进行整理输出;
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import im.zego.takeaguess.data.local.AccountStore
import im.zego.takeaguess.databinding.ActivityLoginBinding
import im.zego.takeaguess.ui.home.HomeActivity
class LoginActivity : AppCompatActivity() {
//lateinit 关键词-延迟赋值,var是必须要先赋值
private lateinit var binding: ActivityLoginBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityLoginBinding.inflate(layoutInflater)
setContentView(binding.root)
initView()
}
private fun initView() {
with(binding) {
// 在这个作用域里面的代码都可以省略 (binding.)
// binding.etUserName -> etUserName
btEnter.setOnClickListener {
val userName = etUserName.text.toString()
if (userName.isNotBlank()) {
AccountStore.userName = userName
HomeActivity.open(this@LoginActivity)
}
}
}
}
}
如何确定一个xml定位的呢?
在这种模式下将会自动生成对应的一个class,后缀加上Binding;正如上图官网所示。
ViewBind官网介绍
- lateinit延后生成,这个是针对kotlin要对对象进行赋值的缓冲关键词;这个和java不同。
- with指定上下文的该对象在范围内自由使用kotlin官方文档-with讲解



