class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private val myName:MyName = MyName("Kotlin noob")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.myName = myName //line 1
binding.doneButton.setOnClickListener {
addName(it)
}
}
fun addName(view: View) {
myName?.nickName = nickName_edit.text.toString() //line 2
binding.showNameTextView.text = "hello ${binding.enterNameEditText.text}"
binding.showNameTextView.visibility = View.VISIBLE
binding.enterNameEditText.visibility = View.GONE
view.visibility = View.GONE
}
//this is the class used for data
data class MyName(var name:String="", var nickName:String="")
}
注释的代码如何工作?我的意思是在第1行中,我们如何将myName分配给myName,它们是同一件事,以及如何为每个变量分配引用变量? 第二行是什么?在myName之后
答案 0 :(得分:1)
绑定是在运行时从您的xml文件生成的,在这种情况下
R.layout.activity_main
首先,如果布局的名称不同,则生成的绑定的名称也将不同。
R.layout.activity_test // ActivityTestBinding
现在,在布局中,您将看到一个带有标识符myName
的视图。这就是为什么您生成的类ActivityMainBinding
可以找到myName的原因。因此,binding.myName
引用了xml中的元素,而myName
引用了您创建的对象。这与使用数据绑定更相关,使用Java编写时也应做相同的事情。
?
只是可以用于可为空的对象的运算符。在Java中,您可以编写
if(myName != null){
myName.nickName = nickName_edit.text.toString()
}