कोटलिन में "एक्टिविटी.थिस" का उपयोग कैसे करें?


128

मेरे पास जावा कोड का यह टुकड़ा है:

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

मैं कोटलिन में MainActivity ऑब्जेक्ट प्राप्त करना चाहता हूं। स्वत: रूपांतरण टूट जाता है MainActivity.this


हो सकता है this as MainActivity?
मार्क प्लानो-लेसे

1
और यदि यह कोड अंदर नहीं है MainActivity, तो यह किस उदाहरण से MainActivityजुड़ा हुआ है (और कैसे)? आप किस उदाहरण को एक्सेस करना चाहते हैं this?
हॉटकी

वर्किंग जावा कोड सिर्फ एक्टिविटी.थिस का संदर्भ देता है, तो एक स्टैटिक? मुझे यकीन नहीं है
बाल ०

क्या वर्किंग जावा कोड भी पूरी तरह से अलग फाइल में है?
येल

इस कोड को कैसे कहा जाता है, यदि नहीं, MainActivityलेकिन फिर भी कास्टिंग thisकरना है MainActivity? एक उपवर्ग में हो सकता है?
मार्क प्लानो-लेसे

जवाबों:


237

आप MainActivityएक योग्यthis का उपयोग करके कोटलिन में अपनी वस्तु का संदर्भ प्राप्त कर सकते हैं । उदाहरण के लिए:

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

1
फ्रैगमेंट के बारे में कैसे? मैंने प्रसंग को फ़्रैगमेंट ( @ActivityContextविशेषता के साथ ) में इंजेक्ट किया है , अब मुझे गतिविधि की आवश्यकता है। बेशक, मैं फ्रैगमेंट में getActivity()(कोटलिन activity) के बारे में जानता हूं , लेकिन क्या दूसरा तरीका ठीक है या मेरे पास कॉनटेक्स्ट है, इसका उपयोग गतिविधि तक पहुंचने के लिए करना बेहतर है?
बजे

@ Dr.jacky मुझे लगता है कि आप कर सकते हैं '(संदर्भ? YourActivity)' कास्ट। अब आप अपनी गतिविधि के तरीकों
Gian Gomen

@ siddarth-g यदि आप अनसुलझे सन्दर्भों के साथ कोई समस्या रखते हैं तो मैं सहायता प्राप्त करने के लिए MCVE के साथ एक नया प्रश्न बनाने की सलाह देता हूँ ।
mfulton26

@ mfulton26 ने इसका संकलन नहीं जारी किया @ @ गतिविधिनाम ने मेरे लिए किसी अन्य परियोजना में भी काम नहीं किया।
सिद्दार्थ जी

18

इसके बजाय इस लेबल को आज़माएं

this@YourActivityName

1
अनिलोलेव्ड संदर्भ
सिद्दार्थ जी

यह संकलन नहीं करता है
इगोरगानापोलस्की

2
@IgorGanapolsky एक्टिविटीनाम को अपनी गतिविधि के नाम में बदल दें -_-
ग्रीचा

1

यदि आप एक आंतरिक वर्ग से एक्टिविटी.थिस को बुला रहे हैं, तो आपको कक्षा से पहले इनर डालना होगा

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

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

@ यदि आप सही हैं, तो इनर क्लास के अंदर एक्टिविटी एक्सेस करने के लिए इनर कीवर्ड की आवश्यकता होती है
droidev

0

जैसे आप जावा में करते हैं, गतिविधि के संदर्भ को मेनएक्टिविटी के रूप में देखते हैं। वैसे, कोटलिन में आपको यह संदर्भ मिलेगा @ MainActivity


क्या आप इस टिप्पणी को जोड़ रहे हैं? क्या आप कुछ हल किए गए संदर्भ दे सकते हैं? यह हमारे लिए उपयोगी होगा, ताकि अगली बार से हम इसका अनुसरण करें
द बाला

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

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