我不了解这两行Kotlin代码如何工作

时间:2019-07-16 21:13:44

标签: android kotlin

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之后

  • 我来自Java背景,如果可以用Java示例/语法进行解释,那就太好了

1 个答案:

答案 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() 
}