EditText Kotlin में टेक्स्ट सेट करना


147

मैं एक EditText में पाठ सेट करने की कोशिश कर रहा हूँ, लेकिन यह कहता है:

Type mismatch. 
Required: Editable 
Found: String

मेरा कोड इस प्रकार है:

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

उपयोग करने के लिए मत कहो setTextक्योंकि मैं कोटलिन का उपयोग कर रहा हूं, जावा का नहीं।



एक तरफ: यदि आपको कोटलिन एंड्रॉइड एक्सटेंशन (एंड्रॉइड स्टूडियो के साथ शिप किया गया) का उपयोग करने के लिए आपको viewViewById की आवश्यकता नहीं है। आपको बस nexttxt.setText(name)बिना किसी खोज या कास्टिंग के कॉल करने में सक्षम होना चाहिए ।
AjahnCharles 12

यह कोई कोटलिन कोड नहीं है जैसा कि आप @Singh
Sazzad Hissain Khan

जवाबों:


310

का उपयोग करें setText(String), के बाद से editText.textउम्मीद है Editable, नहीं एक String


न तो एडिट टेक्स्ट सेट के बाद फ़ोकस हो जाता है () और न ही सॉफ्ट इनपुट कीबोर्ड खुला
सौरभ भंडारी

पर क्यों? ऐसा ही लगता है !!
मालविंदर सिंह

36

के setText(String)रूप में उपयोग की EditText.textआवश्यकता होती है editableपर प्रथम स्थान पर स्ट्रिंग नहीं

क्यों ?

इस लिंक के तहत माइकल द्वारा दी गई अच्छी व्याख्या । अधिक विस्तार के लिए इस लिंक पर जाएं

जावा गेट्टर / सेटर जोड़ी के लिए सिंथेटिक प्रॉपर्टी बनाते समय कोटलिन पहले एक गेट्टर की तलाश करता है। गेट्टर एक प्रकार का गेट्टर के साथ सिंथेटिक संपत्ति बनाने के लिए पर्याप्त है। दूसरी ओर, संपत्ति नहीं बनाई जाएगी यदि केवल एक सेटर प्रस्तुत करता है।

जब एक सेटर खेलने में आता है तो संपत्ति का निर्माण और मुश्किल हो जाता है। कारण यह है कि गेटटर और सेटर का अलग-अलग प्रकार हो सकता है। इसके अलावा, उपकेंद्र में गेटटर और / या सेटर को ओवरराइड किया जा सकता है।


22

यहां कई काम करने के जवाब हैं, लेकिन अगर आप अभी भी संपत्ति प्रारूप का उपयोग करना चाहते हैं और आपका कोड साफ है, तो आप एक एक्सटेंशन लिख सकते हैं:

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

आप इसे इस तरह से उपयोग कर सकते हैं:

mEditText.text = myString.toEditable()

1
पुराने जावा सेटटेक्स्ट का उपयोग करने की तुलना में एक्सटेंशन दृष्टिकोण बेहतर है।
पायोत्र बदुरा

18

यदि आप .textसिद्धांत से गेट्टर का उपयोग करना चाहते हैं , तो उपयोग करें:

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

3

या आप एक्सटेंशन प्रॉपर्टी का उपयोग कर सकते हैं:

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

और के .value=बजाय का उपयोग करें.text=


2

कोटर्स और गुणों के लिए जावा सम्मेलनों का पालन करने वाली विधियाँ (नाम के साथ शुरू होने वाले नाम के साथ कोई तर्क-वितर्क विधियाँ और सेट से शुरू होने वाले नामों के साथ एकल-तर्क विधियाँ) कोटलीन में गुणों के रूप में प्रदर्शित की जाती हैं। लेकिन, जब एक जावा गेट्टर / सेटर जोड़ी के लिए एक संपत्ति पैदा करते हैं, तो कोटलिन पहले एक गेट्टर की तलाश करता है। गेट्टर प्रकार से प्रापर्टी के प्रकार का पता लगाने के लिए पर्याप्त है। दूसरी ओर, संपत्ति नहीं बनाई जाएगी यदि केवल एक सेटर मौजूद है (क्योंकि कोटलिन इस समय सेट-केवल गुणों का समर्थन नहीं करता है)।

जब एक सेटर खेल में आता है, तो संपत्ति निर्माण प्रक्रिया थोड़ी अस्पष्ट हो जाती है। कारण यह है कि गेटटर और सेटर का अलग-अलग प्रकार हो सकता है। इसके अलावा, गेटक और / या सेटर को एक उपवर्ग में ओवरराइड किया जा सकता है, जो वास्तव में Android में EditText का मामला है।

उपरोक्त मामले में Android TextView वर्ग में एक गेटटर होता है

CharSequence getText() 

और एक सेटर शून्य

setText(CharSequence)

यदि मेरे पास TextView प्रकार का एक चर होता तो मेरा कोड ठीक काम करता। लेकिन मैंने EditText क्लास का इस्तेमाल किया, जिसमें ओवरराइड गेट्टर होता है

Editable getText()

जिसका अर्थ है कि आप एक EditText के लिए एक संपादन योग्य प्राप्त कर सकते हैं और एक Editable को एक EditText पर सेट कर सकते हैं। इसलिए, कोटलिन यथोचित प्रकार का एक कृत्रिम संपत्ति पाठ बनाता है। जैसा कि स्ट्रिंग वर्ग संपादन योग्य नहीं है, इसीलिए मैं एडिट टेक्स्ट वर्ग की टेक्स्ट प्रॉपर्टी को स्ट्रिंग उदाहरण नहीं दे सकता।

ऐसा लगता है कि जैटरबिन्स जावा गेट्टर और सेटर विधियों के लिए कोटलिन गुण उत्पन्न करते समय, गेट्टर विधियों की प्रमुख भूमिका को निर्दिष्ट करना भूल गया। वैसे भी, मैंने जेट ब्रेन कोटलिन वेबसाइट पर जीथब के माध्यम से पुल अनुरोध प्रस्तुत किया है।

मुझे इस मध्यम पोस्ट में समस्या के बारे में विस्तार से बताया गया है कि कोटलिन जावा गेटर्स और सेटर्स से संपत्ति कैसे उत्पन्न करता है (अनब्रांडेड बीब्री द्वारा)


0

मेरी परियोजनाओं में मेरे पास एक ही मुद्दा था, मैं आपको एक उदाहरण देता हूं जो दिखाता है कि कोटलिन का उपयोग करके लेआउट में डेटा को कैसे पुनः प्राप्त और सेट किया जाए: एक बटन 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")
                }

0

सरल उपाय

edittext.setText(yourdataइसके बजाय) का उपयोग करें edittext.textक्योंकि EditText संपादन योग्य है, के edittext.textलिए उपयोग किया जाता हैTextView

उदाहरण के लिए:

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

यही मेरे लिए इसका काम है।



-1

सेटटेक्स्ट (स्ट्रिंग), इसलिए आपको अपने स्ट्रिंग को एडिट टेक्स्ट पर सेट करना होगा, इसलिए आपके मामले में यह है: nametxt.setText (नाम)


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



हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.