单击按钮:TextView.text =“工作”,但EditText.text =“不工作”

时间:2018-08-13 17:48:50

标签: kotlin android-edittext

如标题所述:

我想通过单击按钮更改editText内的文本。

我可以使用以下代码通过TextViews做到这一点:

TextView.text= "new text here"

但不适用于EditText

我已经尝试过这样的事情:

editText.setText(“此处输入新文本”)

有人可以告诉我editTexts的等效代码吗?

这是到目前为止的代码:

        dialog.setOnClickListener {
        var builder = AlertDialog.Builder(this)
        var inflater: LayoutInflater = layoutInflater
        var view : View = inflater.inflate(R.layout.dialog,null)
        builder.setView(view)
        builder.setTitle("categories")
        builder.setPositiveButton("Ver", { dialogInterface: DialogInterface, i: Int ->
            mainscreen.visibility = View.GONE
            ListView.visibility = View.VISIBLE
            listdogs.visibility=View.VISIBLE
            listdogs.adapter = adapterdogs
            editText?.setText("husky")
        })

致谢

2 个答案:

答案 0 :(得分:0)

如果确定此EditText不为空,则需要editText?.setText("new text here")editText!!.setText("new text here")

答案 1 :(得分:0)

之所以发生这种情况,是因为在EditText的情况下java getter setter模棱两可。要了解这种情况,您首先需要了解kotlin如何从kotlin的java类生成属性。

科特林官员

  

遵循getter和setter的Java约定的方法(名称以get开头的无参数方法和名称以set开头的单参数方法)在Kotlin中表示为属性。布尔访问器方法(getter的名称以is开头,setter的名称以set开头)表示为与getter方法具有相同名称的属性。

但是如果是EditText,它继承了TextView的setter,则会在此处造成问题。

  

当二传手开始发挥作用时,财产的产生过程就变得big昧。原因是getter和setter可能具有不同的类型。此外,可以在子类中覆盖获取器和/或设置器,   正是Android中的EditText就是这种情况。

     

这意味着您可以获得EditText的Editable并将Editable设置为EditText。因此,Kotlin合理地创建了Editable类型的合成属性文本。考虑到String类不可编辑,因此无法将String实例分配给EditText类的text属性。

原始来源https://medium.com/cashify-engineering/how-does-kotlin-generated-property-from-java-getters-and-setters-undocumented-by-jetbrains-7e1ad88052b1