2010-05-17 13 views
65

से startActivityForResult का उपयोग करें मेरे पास मुख्य गतिविधि है जो एक गतिविधि और अन्य वर्ग (जो एक साधारण जावा क्लास है) है, हम इसे "सरल क्लास" कहते हैं। अब मैं उस वर्ग से भागना चाहता हूं, कमांड एक्टिविटीफॉर रिसेट।गैर-गतिविधि

अब हालांकि मैं उस कक्षा (सरल क्लास) को पास कर सकता हूं, केवल मुख्य गतिविधि का संदर्भ, समस्या यह है कि, आप संदर्भ नहीं चला सकते हैं .startActivityForResult (...);

इसलिए सरल क्लास को 'startActivityForResult' का उपयोग करने का एकमात्र तरीका;

MainActivity वर्ग के अंदर मैं SimpleClass का उदाहरण इस तरह से बना सकते हैं:

SimpleClass simpleClass=new SimpleClass(MainActivity.this); 

अब यह कैसे है SimpleClass कुछ ऐसा करने के लिए एक गतिविधि चर के रूप में MainActivity के संदर्भ पारित करने के लिए है

public Class SimpleClass { 

Activity myMainActivity; 

    public SimpleClass(Activity mainActivity) { 
     super(); 
     this.myMainActivity=mainActivity;  
    } 
.... 


    public void someMethod(...) { 
     myMainActivity.startActivityForResult(...); 
    } 

} 

अब अपने काम के नहीं है ऐसा करने का एक उचित तरीके से, लेकिन: SimpleClass तरह लग रहा है? मुझे डर है कि भविष्य में मुझे कुछ मेमोरी लीक हो सकती हैं।

धन्यवाद। किरण।

+0

मैं नहीं जानता कि आप क्या करने की कोशिश कर रहे हैं, लेकिन आप को पढ़ना चाहिए [इस] (http://stackoverflow.com/questions/2253088/passing-activity-to-non-activity-object-properly)। – Macarse

+1

ऐसा करने से आप अपने simpleClass अंदर 'onActivityResult' विधि इस्तेमाल कर सकते हैं या आप का इरादा नहीं था? [एक ही समस्या यहाँ ..] (http://stackoverflow.com/questions/25557087/how-to-get-the-result-from-onactivityresult-inside-another-classoutside-of-the/25557182?noredirect = 1 # comment39915501_25557182) –

उत्तर

3

यदि आपको पिछली गतिविधि से परिणाम प्राप्त करने की आवश्यकता है, तो आपकी कॉलिंग क्लास को गतिविधि प्रकार की आवश्यकता है।

क्या आप Activity.startActivityForResult() बुला यदि आप परिणाम का उपयोग कभी नहीं का उद्देश्य है (कम से कम नमूना कोड आप पोस्ट के अनुसार)।

क्या myMainActivity परिणाम के साथ कुछ भी करते हैं? यदि ऐसा है, तो बस SimpleClass गतिविधि के उप-वर्ग बनाएं और परिणाम को SimpleClass के भीतर से संभाल लें।
यदि myMainActivity परिणाम की आवश्यकता है, तो हो सकता है कि आपको myMainActivity से गतिविधि शुरू करने के लिए कोड को दोबारा संशोधित करना चाहिए।

+2

मैं परिणाम का उपयोग कर रहा हूं, बस मैं इसे अलग वर्ग में अलग करना चाहता हूं, इसलिए मैं सोच रहा था कि भविष्य में रिसाव के बिना, मैं एक गैर-गतिविधि वर्ग में गतिविधि पैरामीटर को कैसे पास कर सकता हूं। – rayman

+1

सरल क्लास को नेस्टेड क्लास बनाने के बारे में क्या? – codinguser

0

बेहतर समाधान है:

  1. SimpleClass भीतर SimpleClass अपने Activity वर्ग
  2. परिणाम से निपटने के रूप में startActivityForResult
  3. एक और गतिविधि को बुलाने की एक उपवर्ग बनाना ही
+0

ऐसा लगता है कि यह काम करना चाहिए, लेकिन मुझे यह मिला: 'java.lang.NullPointerException: आभासी विधि का आह्वान करने का प्रयास' android.app.ActivityThread $ ApplicationThread android.app.ActivityThread.getAplicationThread() 'एक शून्य ऑब्जेक्ट संदर्भ पर' – Boy

54

मैं नहीं जानता अगर यह अच्छा अभ्यास है या नहीं, लेकिन casting a Context object to an Activity object ठीक संकलित करता है।

if (mContext instanceof Activity) { 
     ((Activity) mContext).startActivityForResult(...); 
} else { 
     Log.e("mContext should be an instanceof Activity."); 
} 

यह संकलन करना चाहिए, और परिणाम वास्तविक गतिविधि संदर्भ पकड़े को मिल जाने चाहिए:

इस प्रयास करें।

+0

कैसे अगर किसी सेवा से संदर्भ पारित किया गया है? –

+7

नहीं, यह एक कास्ट अपवाद लॉन्च करता है! –

+1

एक संदर्भ अनिवार्य रूप से एक गतिविधि नहीं है (उदाहरण के लिए यदि यह 'myActivity.getAplicationContext()' –