2012-02-10 16 views
15

एक गतिविधि आप एक आशय की जरूरत है, की तरह शुरू करने के लिए:उपयोग एक और गतिविधि शुरू करने के लिए

Intent i = new Intent(context, class) 

तो संदर्भ पैरामीटर में भरने के लिए, दो विकल्प उपलब्ध हैं:

  • उपयोग MyActivity.this या सिर्फ this
  • उपयोग getApplicationContext()
  • उपयोग getBaseContext()

और मुझे यकीन है वहाँ एक या दो अधिक विकल्प हैं हूँ। ये विकल्प सब, ट्यूटोरियल के कुछ प्रकार में दिखाई देते हैं एक पहले का उपयोग करता है, अगले तीसरा विकल्प का उपयोग करता है।

तो जो एक मैं इस्तेमाल करना चाहिए? क्या इससे कोई फर्क पड़ता है? क्या यह अलग-अलग मामलों के लिए अलग है?

उत्तर

14

हां अलग-अलग मामलों के लिए अलग है,

यह दायरे पर निर्भर करता है। आप एक वैश्विक कक्षा में एक विधि बना रहे हैं तो मान लीजिए कि extendsApplication एक Toast कि के हर वर्ग में प्रयोग किया जाता है बनाने के लिए अपने Application आप getApplicationContext() का उपयोग यह बनाने के लिए कर सकते हैं।

आप Activity.this

भी उपयोग कर सकते हैं आप एक राय यह है कि उस विशेष गतिविधि के लिए प्रतिबंधित है बनाना चाहते हैं, तो आप कुछ भीतरी कक्षा में एक AlertDialog बनाना चाहते हैं का कहना है कि AsyncTask, तो आप Activity.this उपयोग करने के लिए है, क्योंकि AlertDialog को Activity से ही जोड़ा जाना है।

इसके अलावा getBaseContext() का उपयोग नहीं करते सिर्फ Context है कि आप कर रहे हैं का उपयोग करें। इसके लिए और जानकारी प्राप्त करने के लिए आप this Answer देख सकते हैं।

तो, शुरू करने के लिए वास्तविक प्रश्न का उत्तर Activity.this का उपयोग करना बेहतर है।

Intent intent = new Intent(Current_Activity.this, Calling.class); 
startActivity(intent); 
-1

आप इसे इस तरह करते हैं ....

Intent intent = new Intent(); 
intent.setClass(MainActivity.this, SecondActivity.class); 
startActivity(intent); 
+0

मैं लगता है कि ओपी जानता है कि SmartLemon :) –

+0

का जवाब दे, न सिर्फ पहले कुछ (?) शब्द से पहले पूरे प्रश्न पढ़ कृपया :) – nhaarman

+0

मैं पूरी बात पढ़ा है, सवाल का जवाब था, तो आप गतिविधि का उपयोग जैसा कि ऊपर दिखाया गया है। – FabianCook

4

वे सुनिश्चित करने के लिए अलग हैं। ये अलग-अलग संदर्भ हैं, और कम से कम संभावित दायरे (संदर्भ) के साथ उपयोग किया जाना चाहिए।

उदाहरण के लिए हम ApplicationContext के बजाय गतिविधि के संदर्भ का उपयोग कर सकते हैं, एक गतिविधि संदर्भ का उपयोग करना चाहिए, एक ही आवेदन संदर्भ, और आधार संदर्भ के लिए लागू होता है।

+1

यह सच है, लेकिन 'getBaseContext' के लिए नहीं। 'getBaseContext'' ContextWrapper' वर्ग का एक तरीका है। डेवलपर निश्चित रूप से यह नहीं जान सकता कि इसके साथ कौन सा संदर्भ लपेटा गया है। – Olegas

+0

यह समझ में आता है लेकिन मैं इस अधिकतम के "क्यों" के बारे में उत्सुक हूं। और क्या किसी अन्य गतिविधि या एप्लिकेशन संदर्भ से गतिविधि शुरू करने के बीच कोई कार्यात्मक अंतर है? –

संबंधित मुद्दे