android - কোটলিনে "সন্ধান ভিউবিআইআইডি" করতে সক্ষম নয়। ত্রুটি পেতে "টাইপ অনুমান ব্যর্থ হয়েছে"




android-layout kotlin (6)

কোড: এটি করার আরেকটি উপায়।

class KotlinActivity : AppCompatActivity() {


        var recycler_view: RecyclerView? = null

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_kotlin)

            recycler_view = findViewById<RecyclerView>(R.id.recycler_view)


        }
    }

আমি আইডি দ্বারা একটি RecycleView দেখার চেষ্টা করার সময় আমি নিম্নলিখিত ত্রুটিটি পাচ্ছি।

ত্রুটি: - টাইপ অনুমান ব্যর্থ: প্যারামিটার টি অনুমান করার জন্য পর্যাপ্ত তথ্য নেই

কোড:

class FirstRecycleViewExample : AppCompatActivity() {
    val data = arrayListOf<String>()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.first_recycleview)

        val recycler_view =  findViewById(R.id.recycler_view) as RecyclerView ///IN THIS LINE I AM GETTING THE ERROR

        data.add("First Data")
        data.add("Second Data")
        data.add("Third Data")
        data.add("Forth Data")
        data.add("Fifth Data")

        //creating our adapter
        val adapter = CustomRecycleAdapter(data)

        //now adding the adapter to recyclerview
        recycler_view.adapter = adapter
    }
}

আপনার কোডের জন্য এই লাইনটি যা আপনি নিয়ন্ত্রণকারী ব্যবহার করছেন তা যুক্ত করুন।

val tvHello = findViewById<TextView>(R.id.tvHello)

আপনি কোটলিনে ভেরিয়েবলগুলিকে আইডি দেওয়ার বিষয়টি উপেক্ষা করতে পারেন। আপনার কেবল একটি প্লাগইন ব্যবহার করা দরকার

আপনার গ্রেড এ এটি আটকান

 apply plugin: 'kotlin-android-extensions'

এবং তারপরে আপনার ভেরিতে আইডিকে বরাদ্দ করার দরকার নেই, আপনি কেবল এটি পছন্দ করতে পারেন

 recycler_view.setAdapter(youradapter);

এটা চেষ্টা কর:

এখানে দৃশ্যের বাঁধাই করতে জেনেরিক ফাংশন ব্যবহার করুন। এটির সাধারণ ফাংশন এটি যে কোনও দৃষ্টির জন্য ব্যবহার করতে পারে।

class MyActivity : AppCompatActivity() {
    private lateinit var recycler_view : RecyclerView
    override fun onCreate(savedInstanceState: Bundle?) {
        ...
        recycler_view = bind(R.id.recycler_view)
    }
}

fun <T : View> Activity.bind(@IdRes res : Int) : T {
    @Suppress("UNCHECKED_CAST")    
    return findViewById(res) as T
}

এর মতো কিছু চেষ্টা করুন:

val recyclerView = findViewById<RecyclerView>(R.id.recycler_view)

আপনি এর জন্য Kotlin Android Extensions ব্যবহার করতে পারেন। ডকটি here
এটির সাহায্যে আপনি সরাসরি আপনার recycler_view কল করতে পারেন।

কোটলিন অ্যান্ড্রয়েড এক্সটেনশানস:

  • আপনার অ্যাপ্লিকেশন gradle.build apply plugin: 'kotlin-android-extensions' ইন apply plugin: 'kotlin-android-extensions' করুন apply plugin: 'kotlin-android-extensions'
  • আপনার ক্লাসে আমদানির জন্য import kotlinx.android.synthetic.main.<layout>.* যেখানে <layout> আপনার লেআউটটির ফাইল নাম।
  • এটি recycler_view , আপনি সরাসরি আপনার recycler_view কল করতে পারেন।

এটা কিভাবে কাজ করে? আপনি যখন প্রথমবার recycler_view কল করেন, সন্ধান recycler_view একটি কল হয়ে যায় এবং ক্যাশে হয়


সাধারণত কোটলিন বন্ধনীগুলিতে প্রদত্ত তথ্য ব্যবহার করে আপনার ধরণের অনুমান করতে পারে।

এই ক্ষেত্রে, এটি এমনটি হতে পারে না যাতে আপনাকে এটির মতো স্পষ্ট করে এটি নির্দিষ্ট করতে হবে

findViewById<RecyclerView>(R.id.recycler_view)

প্রকারটি সম্পর্কে সত্যই নিশ্চিত নয় তবে এটি আপনাকে কীভাবে নির্দিষ্ট করা উচিত

আমি এটি যুক্ত করতে চাই, Anko ব্যবহার করে আপনি নিজের কোডটি আরও সহজ করে তুলতে পারেন:

val recycler_view : RecyclerView =  find(R.id.recycler_view)






type-inference