EditText Kotlin에서 텍스트 설정


147

EditText에서 텍스트를 설정하려고하지만 다음과 같이 말합니다.

Type mismatch. 
Required: Editable 
Found: String

내 코드는 다음과 같습니다.

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

setTextJava가 아닌 kotlin 을 사용하고 있기 때문에 사용하지 마십시오 .



따로 : Kotlin Android 확장 (Android Studio와 함께 제공)을 사용하는 경우 findViewById가 필요하지 않습니다. nexttxt.setText(name)찾기 또는 전송하지 않고도 전화를 걸 수 있습니다 .
AjahnCharles

답변:



36

사용 setText(String)등은 EditText.text필요 editable문자열이 아닌 firstplace에서

왜 ?

Michael 이이 링크 아래에 설명 했다 . 자세한 내용은이 링크를 방문하십시오

Java getter / setter 쌍에 대한 합성 특성을 생성 할 때 Kotlin은 먼저 getter를 찾습니다. 게터는 게터 유형으로 합성 속성을 만들기에 충분합니다. 반면에 세터 만 제공되는 경우 속성이 작성되지 않습니다.

세터가 게임을 시작하면 속성 생성이 더 어려워집니다. 그 이유는 getter와 setter의 유형이 다를 수 있기 때문입니다. 또한, getter 및 / 또는 setter는 서브 클래스에서 재정의 될 수 있습니다.


22

여기에 몇 가지 작동 답변이 있지만 여전히 속성 형식을 사용하고 코드를 깨끗하게 보이려면 확장을 작성할 수 있습니다.

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

그런 다음 다음과 같이 사용할 수 있습니다.

mEditText.text = myString.toEditable()

1
확장 접근법은 오래된 Java setText를 사용하는 것보다 낫습니다.
Piotr Badura

18

.text원칙적으로 getter 를 사용하려면 다음을 사용하십시오.

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

3

또는 확장 속성을 사용할 수 있습니다.

var EditText.value
    get() = this.text.toString()
    set(value) {
            this.setText(value)
    }

.value=대신에 사용하십시오.text=


2

getter 및 setter에 대한 Java 규칙을 따르는 메소드 (get으로 시작하는 이름을 가진 인수가없는 메소드 및 set로 시작하는 이름을 가진 단일 인수 메소드)는 Kotlin의 특성으로 표시됩니다. 그러나 Java getter / setter 쌍의 속성을 생성하는 동안 Kotlin은 처음에는 getter를 찾습니다. 게터는 게터 유형에서 속성 유형을 유추하기에 충분합니다. 반면에 세터 만있는 경우 속성이 생성되지 않습니다 (코 틀린은 현재 설정 전용 속성을 지원하지 않기 때문에).

세터가 작동하면 속성 생성 프로세스가 약간 모호해집니다. 그 이유는 getter와 setter의 유형이 다를 수 있기 때문입니다. 또한 getter 및 / 또는 setter는 하위 클래스에서 재정의 될 수 있습니다.이 클래스는 Android의 EditText와 동일합니다.

위의 경우 Android TextView 클래스에는 getter가 포함되어 있습니다.

CharSequence getText() 

세터 보이드

setText(CharSequence)

TextView 유형의 변수가 있으면 코드가 정상적으로 작동했을 것입니다. 그러나 재정의 된 getter가 포함 된 EditText 클래스를 사용했습니다.

Editable getText()

즉, EditText에 대한 Editable을 가져와 Editable을 EditText로 설정할 수 있습니다. 따라서 Kotlin은 합리적으로 편집 가능한 유형의 합성 속성 텍스트를 만듭니다. String 클래스는 Editable이 아니기 때문에 EditText 클래스의 text 속성에 String 인스턴스를 할당 할 수 없습니다.

JetBrains가 getter 메소드의 주요 역할을 지정하는 동안 Java getter 및 setter 메소드에 대한 kotlin 특성을 생성하는 것을 잊어 버린 것 같습니다. 어쨌든, 나는 github을 통해 Jet brains kotlin 웹 사이트에 풀 요청을 제출했습니다.

나도이 매체 게시물에 문제 이상 설명했다 합니까 코 틀린 자바 게터와 세터에서 속성 (JetBrains의에 의해 언급되지 않음)를 생성하는 방법


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")
                }

0

간단한 솔루션

그냥 사용 edittext.setText(yourdata하는 대신) edittext.text때문에 글고 치기가 편집 할 수는이 edittext.text사용된다TextView

예를 들어 :

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

그것이 나를위한 일입니다.


0

다음과 같이 사용하십시오.

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


-2

또는 캐스트TextView나는이 개발자의 편의를 위해 확실히 코 틀린면에 고정한다고 생각하지만!

(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"



-6

nametxt.post를 사용해보십시오 : nametxt.post ({nametxt.setText ( "your text")})

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.