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


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.