未解决的参考:文本 – Android Studio + Kotlin(findViewById故障?)

我正在尝试创建一个警告对话框,虽然我有一个很奇怪的问题。 我的.text给我错误“未解决的参考”。 我三重和四重检查,但不能真正找到原因。

这里是代码:

fun addChannelClicked(view: View) { if (AuthService.isLoggedIn) { val builder = AlertDialog.Builder(this) val dialogView = layoutInflater.inflate(R.layout.add_channel_dialog, null) builder.setView(dialogView) .setPositiveButton("Add") { dialogInterface, i -> // perform some logic when clicked val nameTextField = dialogView.findViewById<EditText>(R.id.addChannelNameTxt) val descTextField = dialogView.findViewById<EditText>(R.id.addChannelDescTxt) val channelName = nameTextField.text.toString() val channelDesc = descTextField.text.toString() // Create channel with the channel name and description hideKeyboard() } .setNegativeButton("Cancel") { dialogInterface, i -> // Cancel and close the dialog hideKeyboard() } .show() } } 

你总是检查值是否为空。 这可以使用if(yourvar != null)来完成,kotlin将在下面的行中自动成为非空类型。 你也可以使用elvis操作符( ?: :)来达到这个目的。

 val dialogView = layoutInflater.inflate(R.layout.add_channel_dialog, null) ?: return 

这将确保你返回一个非null的实例来查看或退出功能,如果没有。 然后你可以打电话safhel:

 val nameTextField = dialogView.findViewById<EditText>(R.id.addChannelNameTxt) 

使用!! 运营商不推荐,从文档 :

!! 运营商是NPE爱好者。

请使用这种语法

  val nameTextField = dialogView!!.findViewById(R.id.addChannelNameTxt) as EditText