programing

텍스트 편집 코틀린에서 텍스트 설정

elecom 2023. 7. 27. 21:38
반응형

텍스트 편집 코틀린에서 텍스트 설정

텍스트 편집에서 텍스트를 설정하려고 하는데 다음 메시지가 나타납니다.

Type mismatch. 
Required: Editable 
Found: String

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

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

사용하지 마십시오.setText자바가 아닌 코틀린을 사용하고 있기 때문입니다.

사용하다setText(String)로, 터부editText.text을 기대합니다.Editable조금도 아닌String.

사용하다setText(String)~하듯이EditText.text에는 을합니다가 합니다.editableStringString이 아닌 첫

왜요?

링크 아래에 제시된 마이클의 멋진 설명입니다.자세한 내용은 이 링크를 참조하십시오.

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

세터가 경기를 시작하면 부동산을 만드는 것이 더 어려워집니다.그 이유는 게터와 세터의 유형이 다를 수 있기 때문입니다.또한 하위 클래스에서 게터 및/또는 세터를 재정의할 수 있습니다.

여기에는 몇 가지 유용한 답변이 있지만 여전히 속성 형식을 사용하고 코드를 정리하려면 확장명을 작성할 수 있습니다.

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

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

mEditText.text = myString.toEditable()

당신이 를 사용하고 getter를 사용하세요..text원칙적으로 다음을 사용합니다.

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

간단한 솔루션

그냥 사용하기edittext.setText(yourdata edittext.text편집 텍스트가 편집 가능하기 때문에edittext.text는 에사니다됩에 됩니다.TextView

예:

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

그게 저를 위한 일입니다.

또는 로 캐스팅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"

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

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

및사를 합니다..value=.text=

Getter 및 setter에 대한 Java 규약을 따르는 메서드(get으로 시작하는 이름을 가진 무인수 메서드 및 집합으로 시작하는 이름을 가진 단일 인수 메서드)는 Kotlin에서 속성으로 표시됩니다.그러나 Java 게터/세터 쌍에 대한 속성을 생성하는 동안 Kotlin은 처음에 게터를 찾습니다.게터는 게터 유형에서 속성 유형을 추론하기에 충분합니다.반면에, 설정자만 있는 경우에는 속성이 생성되지 않습니다(지금은 Kotlin이 집합 전용 속성을 지원하지 않기 때문입니다).

세터가 등장하면 부동산 생성 과정이 다소 모호해집니다.그 이유는 게터와 세터의 유형이 다를 수 있기 때문입니다.또한 하위 클래스에서 게터 및/또는 세터가 재정의될 수 있으며, 이는 정확히 안드로이드의 EditText의 경우입니다.

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

CharSequence getText() 

그리고 세터 보이드.

setText(CharSequence)

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

Editable getText()

즉, 편집 텍스트에 대한 편집 가능한 문서를 가져오고 편집 가능한 문서를 편집 텍스트로 설정할 수 있습니다.따라서 Kotlin은 Editable 유형의 합성 속성 텍스트를 합리적으로 작성합니다.String 클래스가 편집 가능하지 않기 때문에 EditText 클래스의 텍스트 속성에 String 인스턴스를 할당할 수 없습니다.

JetBrains는 Java getter 및 setter 메서드에 대한 kotlin 속성을 생성하는 동안 getter 메서드의 지배적인 역할을 지정하는 것을 잊은 것 같습니다.어쨌든, 저는 github을 통해 Jetbrains kotlin 웹사이트에 pull request를 제출했습니다.

위의 문제를 이 매체 게시물에서도 자세히 설명했습니다. 코틀린이 자바 게터와 세터에서 자산을 생성하는 방법(Jetbrain에 의해 문서화되지 않음)

다음과 같이 사용:

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

제 프로젝트에서도 같은 문제가 있었습니다. Kotlin을 사용하여 레이아웃에서 데이터를 검색하고 설정하는 방법을 보여주는 예를 보여드리겠습니다. 버튼이 하나 있습니다.save_button두 개의 텍스트 편집 필드edit_name그리고.edit_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")
                }
val editable = Editable.Factory.getInstance().newEditable(savedString)

editText.text = editable

setText(String). 따라서 문자열을 설정하여 텍스트를 편집해야 합니다. 따라서 사용자의 경우: nametext.setText(name)

var name:String = "hello world"

textview.text = name

(또는)

var editText:String = "hello world"

textview.setText(name)

EditText의 API를 확인합니다.

void setText (CharSequence text, TextView.BufferType type)

Editable getText ()

링크: https://developer.android.com/reference/android/widget/EditText.html

nametext를 사용해 보십시오.게시물: nametxt.post sysnametxt.setText("너의 텍스트")}

언급URL : https://stackoverflow.com/questions/44493908/setting-text-in-edittext-kotlin

반응형