在EditText Kotlin

时间:2017-06-12 07:41:31

标签: android kotlin android-edittext

我正在尝试在edittext中设置文字但是它说类型不匹配必需可编辑找到字符串我的代码如下

String name = "Paramjeet"
val nametxt = findViewById (R.id.nametxt) as EditText
nametxt.text = name

不要说要使用SetText,因为我使用的是kotlin而不是java

15 个答案:

答案 0 :(得分:176)

使用setText(String),因为editText.text需要Editable,而不是String

答案 1 :(得分:27)

使用NO作为Claim : ClaimID pk, paymentID (FK),EPPID,Claimnumber,GroupNumber, certificate number Payment : paymentID (pk),EPPID, checkDate TmpProcessClaims: TmpProcessClaimsID(pk),EPPID, ClaimNumber,Administrator,GroupNumber, 首先需要CREATE PROCEDURE [dbo].[InsertClaims] AS BEGIN CREATE TABLE #TEMPEPPID ([EPPID] VARCHAR(150), [PaymentID] BIGINT) CREATE TABLE #TEMPCLAIM ([EPPID] VARCHAR(150), [GroupNumber] varchar(10),[ClaimNumber] varchar(50), [CertificateNumber] varchar(15)) SELECT EPPID , PaymentID INTO #TEMPEPPID FROM DBO.Payment SELECT EPPID, [GroupNumber],[ClaimNumber],[CertificateNumber] INTO #TEMPCLAIM FROM [dbo].[TmpProcessClaimsToMedPay] where EPPID in (select EPPID from #TEMPEPPID) INSERT INTO Claim .... END GO 而不是字符串

为什么?

Nice explanation下的 Michael

this link。请访问此链接以获取更多详细信息

为Java getter / setter对生成合成属性时,Kotlin首先寻找getter。 getter足以创建一个具有getter类型的合成属性。另一方面,如果只有一个setter出现,则不会创建该属性。

当一个二传手进场时,属性创造变得更加困难。原因是吸气剂和定位器可能具有不同的类型。此外,可以在子类中重写getter和/或setter。

答案 2 :(得分:13)

如果您想从原则上使用getter .text,请使用:

nametxt.text = Editable.Factory.getInstance().newEditable(name)

答案 3 :(得分:12)

这里有几个可行的答案,但是如果您仍然想使用属性格式并使代码看起来很整洁,则可以编写扩展名:

fun String.toEditable(): Editable =  Editable.Factory.getInstance().newEditable(this)

您可以按以下方式使用它:

mEditText.text = myString.toEditable()

答案 4 :(得分:2)

遵循getxter和setter的Java约定的方法(名称以get开头的无参数方法和名称以set开头的单参数方法)在Kotlin中表示为属性。  但是,在为Java getter / setter对生成属性时,Kotlin首先会寻找一个getter。 getter足以根据getter的类型推断属性的类型。另一方面,如果仅存在setter,则不会创建该属性(因为此时Kotlin不支持仅设置属性)。

当一个二传手进场时,属性生成过程变得有点模棱两可。原因是吸气剂和定位器可能具有不同的类型。此外,可以在子类中重写getter和/或setter,  这与Android中的EditText完全相同。

在上面的例子中,Android TextView类包含一个getter

CharSequence getText() 

和setter void

setText(CharSequence)

如果我有一个TextView类型的变量,我的代码就可以了。  但我使用的EditText类包含一个重写的getter

Editable getText()

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

似乎JetBrains忘记在为Java getter和setter方法生成kotlin属性时指定getter方法的主导作用。无论如何,我已经通过github向Jet brains kotlin网站提交了拉取请求。

我在此媒体帖子中也详细解释了上述问题How Does Kotlin Generate Property from Java Getters and Setters (Undocumented by Jetbrains)

答案 5 :(得分:2)

或者您可以使用扩展名:

char ch = 'r';
if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
    System.out.println("alphabetic");
else if(ch >= '0' && ch <= '9')
    System.out.println("digit");
else
    System.out.println("none");

并使用.value =代替.text =

答案 6 :(得分:0)

List

答案 7 :(得分:0)

我在项目中遇到了同样的问题,我举一个例子,说明如何使用Kotlin在布局中检索和设置数据: 有一个按钮save_button和两个文本编辑字段edit_nameedit_password

 //when cliquing on the button 'save_button' 
    save_button.setOnClickListener {
    // geting the value from the two fields by using .text.toString()
                val email =  edit_name.text.toString()
                val password = edit_password.text.toString()
    // showing the result on the systeme's log 
                    Log.d("Main activity","your email is " + email )
                    Log.d("Main activity", "your password is $password" )
    // Then shows these values into the text view palete using  .setText()
                    text_view.setText("$email " + "$password")
                }

答案 8 :(得分:0)

简单解决方案

只需使用edittext.setText(yourdata而不是edittext.text,因为 EditText 是可编辑的,edittext.text用于TextView

例如:

var name:String = "Muzammil"
edittext.setText(name)

对我来说就是这样。

答案 9 :(得分:0)

像这样使用:

edtTitle.setText(intent.getStringExtra(EXTRA_TITLE))
edtDesc.setText(intent.getStringExtra(EXTRA_DESC))

答案 10 :(得分:0)

广播TextView,但我相信这应该固定在kotlin上,以确保开发人员的方便!

(someEditText as TextView).text = "someTextValue"

或带有一些扩展名:

val EditText.asTextView: TextView get() = this as TextView

var EditText.value: CharSequence? 
    get() = asTextView.text
    set(value) {
        asTextView.text = value
    }

您可以写:

someEditText.asTextView.text = "someTextValue"

someEditText.value = "someTextValue"

可惜的是,您无法 编写简单的someEditText.text = "someTextValue"

答案 11 :(得分:0)

使用setText(String),因为editText.text需要Editable,而不是String。 示例:-editText.setText(String)

或使用此editText.text = Editable.Factory.getInstance().newEditable(String)

答案 12 :(得分:-1)

setText(String),所以您必须将字符串setText设置为editText,因此您的情况是: nametxt.setText(name)

答案 13 :(得分:-4)

查看EditText的API:

void setText (CharSequence text, TextView.BufferType type)

Editable getText ()

链接:https://developer.android.com/reference/android/widget/EditText.html

答案 14 :(得分:-5)

尝试使用nametxt.post: nametxt.post({nametxt.setText(&#34;您的文字&#34;)})