未解决的参考:文本 - Android Studio + Kotlin(findViewById错误?)

时间:2017-09-20 10:58:12

标签: android android-studio kotlin

我正在尝试创建一个警告对话框,虽然我有一个非常奇怪的问题。我的.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()
    }
}

3 个答案:

答案 0 :(得分:1)

您应始终检查该值是否为空。它可以使用if(yourvar != null)完成,kotlin将在以下行中自动转换为非null类型。您还可以使用elvis运算符(?:)来达到此目的。

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

这将确保您从视图返回非null实例,或者如果没有则退出功能。然后你可以打电话给safelly:

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

doc

不推荐使用!!运算符
  

!!运营商是NPE爱好者。

答案 1 :(得分:0)

请使用这种语法

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

答案 2 :(得分:-1)

导入kotlinx.android.synthetic.main.your_layout_xml_name。*

请替换&#34; your_layout_xml_name&#34;与你的&#34; layout_name&#34;在导入线上将解决您的问题。