কোটলিনে "ক্রিয়াকলাপ.এটি" কীভাবে অ্যাক্সেস করবেন?


128

আমি জাভা কোড এই টুকরা আছে:

MaterialDialog builder = new MaterialDialog.Builder(MainActivity.this)

আমি কোটলিনে মেইনএ্যাকটিভিটি অবজেক্টটি পেতে চাই। স্বয়ংক্রিয় রূপান্তর বিরতি MainActivity.this।


হতে পারে this as MainActivity?
— মার্ক প্লানো-লেসেই

1
এবং যদি এই কোডটি ভিতরে না থাকে MainActivity, তবে এটি কোন উদাহরণের MainActivityসাথে সংযুক্ত রয়েছে (এবং কীভাবে)? আপনি কোন উদাহরণ হিসাবে অ্যাক্সেস করতে চান this?
— হটকি

কাজ করা জাভা কোডটি কেবল ক্রিয়াকলাপের উল্লেখ করে ?এটি, তাই কোনও স্থির? আমি নিশ্চিত নই
— বাল0r

ওয়ার্কিং জাভা কোডটিও কি সম্পূর্ণ আলাদা ফাইলটিতে রয়েছে?
— ইয়োল

এই কোডটি কীভাবে বলা হয়, যদি না থাকে MainActivityতবে এখনও কাস্টিং thisহয় MainActivity? একটি সাবক্লাসে সম্ভবত?
— মার্ক প্লানো-লেসেই

উত্তর:


237

আপনি MainActivityকোটলিনে একটি যোগ্যthis ব্যবহার করে আপনার অবজেক্টের একটি রেফারেন্স পেতে পারেন । উদাহরণ:

class MyActivity : MainActivity() {
    val builder = MaterialDialog.Builder(this@MyActivity)
}

1
খণ্ড সম্পর্কে কীভাবে? আমি প্রবন্ধগুলিকে টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো করে দিয়েছি ( @ActivityContextএখন অ্যাট্রিবিউট সহ) অবশ্যই, আমি getActivity()টুকরাটিতে (কোটলিন activity) সম্পর্কে জানি , তবে দ্বিতীয় উপায়টি কি ঠিক আছে বা আমার প্রাসঙ্গিক কারণ রয়েছে, ক্রিয়াকলাপটিতে অ্যাক্সেস করার জন্য এটি ব্যবহার করা আরও ভাল?
— ডাঃ জ্যাকি

@ ডাঃ জ্যাকি আমি মনে করি আপনি '(প্রসঙ্গ হিসাবে? আপনার কার্যকলাপ)' কাস্ট করতে পারেন? এখন আপনি আপনার ক্রিয়াকলাপের পদ্ধতিগুলি অ্যাক্সেস করতে পারবেন
— জিয়ান গমেন

@ সিদ্ধার্থ-জি যদি অমীমাংসিত রেফারেন্স নিয়ে আপনার যদি সমস্যা হয় তবে আমি সাহায্যের জন্য এমসিভিই দিয়ে একটি নতুন প্রশ্ন তৈরি করার পরামর্শ দিচ্ছি ।
— mfulton26

@ এমফুল্টন 26 এটি সংকলন ইস্যু নয় এই @ ক্রিয়াকলাপটি আমার পক্ষে অন্য কোনও প্রকল্পে কাজ করে না।
— সিদ্ধার্থ জি

18

পরিবর্তে এই লেবেল চেষ্টা করুন

this@YourActivityName

1
অপ্রচলিত রেফারেন্স
— সিদ্ধার্থ জি

এটি সংকলন করে না
— ইগোরগানাপলস্কি

2
@ ইগোরগানাপলস্কি ক্রিয়াকলাপের নামটি আপনার ক্রিয়াকলাপের নামটিতে পরিবর্তন করুন -_-
— গ্রেচা

1

আপনি যদি কোনও অভ্যন্তরীণ ক্লাস থেকে ক্রিয়াকলাপ.এটি কল করে থাকেন তবে আপনাকে ক্লাসের আগে অভ্যন্তর স্থাপন করতে হবে

class MyActivity : MainActivity() {
    // Call from class itself
    val builder = MaterialDialog.Builder(this@MyActivity) 

    inner class Inner {
        this@MyActivity // Call from the inner class 
    }
}

@ অ্যালেন আপনি সঠিক, অভ্যন্তর শ্রেণীর অভ্যন্তরীণ ক্রিয়াকলাপটি অ্যাক্সেস করার জন্য অভ্যন্তরীণ কীওয়ার্ডটির প্রয়োজন
— দ্রোদেব

0

মেইনএকটিভি.এটি হিসাবে ক্রিয়াকলাপের প্রসঙ্গ পাওয়ার জন্য আপনি যেমন জাভাতে করেন, কোটলিনে আপনি এই @ মেইনএকটিভিটি হিসাবে প্রসঙ্গ পাবেন


আপনি কি জন্য এই মন্তব্য যুক্ত করছেন? আপনি কিছু সমাধান রেফারেন্স দিতে পারেন? এটি আমাদের পক্ষে সহায়ক হবে, যাতে আমরা পরের বার থেকে এটি অনুসরণ করব
— দ্য বালা

0

getActivity()সমতুল্য this@activity_name ম্যাডিয়ালডায়ালগের জন্য নির্মাতার ক্ষেত্রে

materialDialog = MaterialDialog.Builder(this)

0

আপনি এই জাতীয় ক্রিয়াকলাপের অবজেক্টটি পেতে পারেন।

class DemoActivity : MainActivity() {
    val builder = MaterialDialog.Builder(this@DemoActivity)
}

0

কোটলিনে আপনাকে এইভাবে ব্যবহার করতে হবে:

এই @ ActivityName

উদাহরণস্বরূপ: আপনি যদি MainActivity.kt এ "প্রসঙ্গ" সংজ্ঞায়িত করতে চান তবে আপনার এটি ব্যবহার করা উচিত

var mContext:Context = this@MainActivity

কেন? কারণ কোটলিন ভাষায় @ এর অর্থ "এর" যেমন:

val a = this@A // A's this

আপনি যদি আরও তথ্য জানতে চান, আপনি কোটলিন ভাষার ওয়েবসাইটটি দেখতে পারেন: কোটলিনে এই অভিব্যক্তি

@canerkaseler

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