【问题标题】:Button click to: TextView.text = "works" but EditText.text = "Doesnt work"按钮点击到:TextView.text = "works" 但 EditText.text = "Doesnt work"
【发布时间】:2019-01-20 12:19:24
【问题描述】:

正如标题所说:

我想通过单击按钮来更改 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")
        })

问候

【问题讨论】:

标签: kotlin android-edittext


【解决方案1】:

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

【讨论】:

  • 我试过了,它显示了这一点:在 EditText 类型的可为空的接收器上只允许安全 (?.) 或非空断言 (!!.) 调用?
  • @GaboWalker 有什么问题吗?
  • 我正在做一些测试,我试图在对话框中使用你的代码,我正在使用这个:editText!!.setText("new text here") 现在,它使我的应用程序崩溃,我会在检查其他一切正常后立即通知您发生了什么
  • 如果它让你的应用崩溃,那么editText 就是null,你不能使用setText
  • With editText!!.setText("new text here") 我的应用程序崩溃了:editText?.setText("new text here") 我的应用程序没有崩溃,但 editText 一直显示提示: “搜索”仅此而已。我想要实现的是显示一个弹出窗口,当用户单击“确定”按钮时,该应用程序会将您带到特定的类别并在 editText 中输入一个单词,该单词用于在列表中进行过滤.
【解决方案2】:

发生这种情况是因为 java getter setter 在EditText 的情况下不明确,要理解这种情况,您首先需要了解 kotlin 如何从 java 类为 kotlin 生成属性。

Kotlin 官方

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

但万一EditText,它从TextView继承setter在这里创建问题。

当 setter 发挥作用时,属性生成过程变得不明确。原因是 getter 和 setter 可能有不同的类型。此外,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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-03
    • 2022-12-28
    • 2021-05-10
    • 2020-07-31
    • 2016-03-13
    • 2020-11-24
    • 2021-05-20
    • 2020-06-24
    相关资源
    最近更新 更多