সম্পাদনা পাঠ্য কোটলিনে পাঠ্য সেট করা হচ্ছে


147

আমি একটি সম্পাদনা পাঠ্য পাঠ্য সেট করার চেষ্টা করছি কিন্তু এতে বলা হয়েছে:

Type mismatch. 
Required: Editable 
Found: String

আমার কোড অনুসরণ হিসাবে:

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

ব্যবহার করতে বলবেন না setTextকারণ আমি জাভা নয়, কোটলিন ব্যবহার করছি।



অন্যদিকে: আপনি কোটলিন অ্যান্ড্রয়েড এক্সটেনশানগুলি (অ্যান্ড্রয়েড স্টুডিও সহ প্রেরিত) ব্যবহার করেন তবে আপনার অনুসন্ধান ভিউআইআইডি দরকার হবে না need আপনার nexttxt.setText(name)কোনও সন্ধান বা কাস্টিং ছাড়াই কেবল কল করতে সক্ষম হওয়া উচিত ।
অজাহানচারলেস

আপনি কোথাও কোটলিন কোড নন যেমন আপনি @ সিংহকে দাবি করছেন
সাজ্জাদ হিশাইন খান

উত্তর:


310

ব্যবহার করুন setText(String), যেহেতু editText.textএকটি প্রত্যাশা করে Editable, একটি নয় String


না এডিটেক্সট সেট টেক্সট () বা নরম সফ্টওয়্যার ইনপুট কীবোর্ডের পরে ফোকাস পান না
সৌরভ ভান্ডারী

কিন্তু কেন? এ রকমই শোনাচ্ছে !!
মালভিন্দর সিং

36

স্ট্রিং নয় প্রথম স্থানের প্রয়োজন setText(String)হিসাবে ব্যবহার করুনEditText.texteditable

কেন?

নিস ব্যাখ্যা দ্বারা মাইকেল অধীন প্রদত্ত এই লিঙ্কে । আরও বিস্তারিত জানার জন্য এই লিঙ্কটি দেখুন

জাভা গেটার / সেটার জুটির জন্য সিনথেটিক সম্পত্তি তৈরি করার সময় কোটলিন প্রথমে একজন গেটারের সন্ধান করে। গেটর এক ধরণের গেটর সহ একটি সিন্থেটিক সম্পত্তি তৈরি করতে যথেষ্ট। অন্যদিকে সম্পত্তিটি কেবল কোনও সেটার উপহার দিলে তৈরি করা হবে না।

যখন কোনও সেটার খেলায় আসে তখন সম্পত্তি তৈরি আরও কঠিন হয়ে যায়। কারণটি হ'ল গ্রাহক এবং সেটারের বিভিন্ন ধরণের থাকতে পারে। তদতিরিক্ত, গেটর এবং / অথবা সেটারটি একটি সাবক্লাসে ওভাররাইড করা যেতে পারে।


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

যে পদ্ধতিগুলি গেটার এবং সেটারগুলির জন্য জাভা কনভেনশন অনুসরণ করে (গেট দিয়ে শুরু হওয়া নামগুলির সাথে অ-যুক্তি পদ্ধতি এবং সেট দিয়ে শুরু হওয়া নামগুলির সাথে একক-যুক্তি পদ্ধতিগুলি) কোটলিনে সম্পত্তি হিসাবে প্রতিনিধিত্ব করা হয়। তবে, কোনও জাভা গেটার / সেটার জুটি কোটলিনের জন্য কোনও সম্পত্তি তৈরি করার সময় প্রথমে একজন গেটারের সন্ধান করুন। গেটর প্রকারের ধরণ থেকে প্রকারের ধরণটি নির্ধারণ করতে যথেষ্ট। অন্যদিকে, কেবলমাত্র সেস্টার উপস্থিত থাকলে সম্পত্তিটি তৈরি করা হবে না (কারণ এই সময়ে কোটলিন কেবল-সেট বৈশিষ্ট্যগুলি সমর্থন করে না)।

যখন কোনও সেটার খেলতে আসে, সম্পত্তি উত্পাদন প্রক্রিয়াটি কিছুটা অস্পষ্ট হয়ে যায়। কারণটি হ'ল গ্রাহক এবং সেটারের বিভিন্ন ধরণের থাকতে পারে। তদুপরি, গেটর এবং / অথবা সেটারটি একটি সাবক্লাসে ওভাররাইড করা যেতে পারে যা অ্যান্ড্রয়েডে ঠিক এডিটেক্সট এর ক্ষেত্রে।

উপরের ক্ষেত্রে অ্যান্ড্রয়েড টেক্সটভিউ ক্লাসে একজন গিটার রয়েছে

CharSequence getText() 

এবং একটি সেটারের অকার্যকর

setText(CharSequence)

আমার কাছে পাঠ্যদর্শন টাইপের একটি ভেরিয়েবল থাকলে আমার কোডটি ভাল কাজ করত। তবে আমি এডিটেক্সট ক্লাস ব্যবহার করেছি যাতে একটি ওভাররাইড গেটর রয়েছে

Editable getText()

যার অর্থ আপনি একটি সম্পাদনা পাঠের জন্য একটি সম্পাদনাযোগ্য পেতে এবং একটি সম্পাদনাযোগ্যকে একটি সম্পাদনাযোগ্য সেট করতে পারেন। সুতরাং, কোটলিন যুক্তিসঙ্গতভাবে সম্পাদনযোগ্য প্রকারের একটি সিন্থেটিক সম্পত্তি পাঠ্য তৈরি করে। স্ট্রিং ক্লাসটি সম্পাদনযোগ্য নয়, এ কারণেই আমি সম্পাদনা পাঠের শ্রেণীর পাঠ্য সম্পত্তিটিতে একটি স্ট্রিং উদাহরণ বরাদ্দ করতে পারি না।

দেখে মনে হচ্ছে জেটব্রেইন জাভা গেটর এবং সেটার পদ্ধতির জন্য কোটলিন বৈশিষ্ট্য তৈরি করার সময় গেটর পদ্ধতির প্রভাবশালী ভূমিকা উল্লেখ করতে ভুলে গিয়েছিল। যাইহোক, আমি গিথুবের মাধ্যমে জেট ব্রেন কোটলিন ওয়েবসাইটটিতে পুল অনুরোধ জমা দিয়েছি।

আমার এই মিডিয়াম পোস্টেও উপরোক্ত সমস্যাটি সম্পর্কে বিস্তারিত রয়েছে আমি কীভাবে কোটলিন জাভা গেটার্স এবং সেটারগুলি থেকে সম্পত্তি জেনারেট করে (জেটব্রাইন দ্বারা অদ্বিতীয়)


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

সেটটেক্সট (স্ট্রিং), সুতরাং আপনার সম্পাদনা পাঠের জন্য আপনার স্ট্রিংটি অবশ্যই পাঠ্য হবে, সুতরাং আপনার ক্ষেত্রে হ'ল: নেম টেক্সট.সেটেক্সট (নাম)


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



আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.