एलेक्स वोलोवॉय के जवाब को थोड़ा और विस्तृत करते हुए -
यदि आप को यह समस्या हो रही है, तो संदर्भ के लिए getActivity () ठीक काम करती है
अन्य मामलों में:
यदि आप उपयोग नहीं करना चाहते हैं-
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//not recommend
तो अपने बाहरी क्षेत्र में इस तरह के एक समारोह बनाने के लिए -
public void gettingContext(Context context){
real_context = context;//where real_context is a global variable of type Context
}
अब, अपनी मुख्य गतिविधि में जब आप कभी भी एक नया आउटसाइडक्लास बनाते हैं, तो उपरोक्त गतिविधि को तर्क के रूप में गतिविधि के संदर्भ में देने के तुरंत बाद उपरोक्त विधि को कहें। अपनी मुख्य गतिविधि में भी एक कार्य करें-
public void startNewActivity(final String activity_to_start) {
if(activity_to_start.equals("ACTIVITY_KEY"));
//ACTIVITY_KEY-is a custom key,just to
//differentiate different activities
Intent i = new Intent(MainActivity.this, ActivityToStartName.class);
activity_context.startActivity(i);
}//you can make a if-else ladder or use switch-case
अब अपने बाहरी क्षेत्र में वापस आएं, और नई गतिविधि शुरू करने के लिए कुछ इस तरह करें-
@Override
public void onClick(View v) {
........
case R.id.any_button:
MainActivity mainAct = (MainActivity) real_context;
mainAct.startNewActivity("ACTIVITY_KEY");
break;
}
........
}
इस तरह आप झंडे के साथ खिलवाड़ किए बिना अलग-अलग आउटसाइडक्लास से बुलाए गए विभिन्न गतिविधियों को शुरू कर पाएंगे।
नोट-प्रयास करें कि खंड के लिए रचनाकार के माध्यम से संदर्भ ऑब्जेक्ट को कैश न करें (एडॉप्टर, इसके ठीक) के साथ। एक टुकड़ा में एक खाली निर्माण होना चाहिए अन्यथा कुछ परिदृश्यों में एप्लिकेशन क्रैश हो जाता है।
कॉल करना याद रखें
OutsideClass.gettingContext(Context context);
onResume () फ़ंक्शन के रूप में अच्छी तरह से।