2012-07-31 20 views
5

कहें कि मेरे पास किसी ऑब्जेक्ट का संदर्भ है, मुझे इसे एक गतिविधि से दूसरे में कैसे पारित करने के बारे में जाना चाहिए?एक गतिविधि से दूसरे गतिविधि में संदर्भ (गैर-धारावाहिक) कैसे पास किया जाए?

मैं एप्लिकेशन ऑब्जेक्ट/सिंगलेट्स/स्थिर चर से पूछताछ नहीं करना चाहता हूं।

क्या यह अभी भी संभव है?

उत्तर

7

आप किसी अन्य गतिविधि में स्थिर वैरिएबल घोषित कर सकते हैं, या एप्लिकेशन क्लास में कुछ ग्लोबल वैरिएबल घोषित कर सकते हैं, फिर किसी भी गतिविधि तक पहुंच सकते हैं, जैसे कि आप ऑब्जेक्टिव टाइप से न्यूटाइप टाइप क्लास न्यूएक्टिविटी में कुछ ऑब्जेक्ट को पार्स करना चाहते हैं। निम्नानुसार करें:

NewActivity.java में स्टेटिक न्यूटाइप का ऑब्जेक्ट घोषित करें।

public static NewObject newObject=null; 

जब आप न्यूएक्टिविटी का आह्वान करते हैं, तो निम्न कार्य करें।

NewActivity.newObject=item; 
Intent intent=new Intent(OldActivity.this, NewActivity.class); 
startActivity(intent); 
+0

हाय, मैं गतिविधि को स्थैतिक चर/एप्लिकेशन ऑब्जेक्ट तक पहुंचने की बजाय नहीं रखूंगा। – kietdlam

+0

यदि आप इरादे के माध्यम से कुछ ऑब्जेक्ट पास करना चाहते हैं तो आप बंडल का उपयोग कर सकते हैं, लेकिन बंडल में कुछ मूल्य डालने के लिए, यह एक पार्सल करने योग्य ऑब्जेक्ट होना चाहिए, और यदि ऐसा नहीं होता है तो आपको ऑब्जेक्ट पास करने के लिए किसी अन्य तरीके से डिवाइस करना होगा, और एंड्रॉइड एक्टिविटी मैनेजर के रूप में, स्वयं ही गतिविधि के निर्माता का आह्वान करता है, कन्स्ट्रक्टर में पैरामीटर पास नहीं कर सकता है। मुझे नहीं लगता कि कोई और तरीका है। – jeet

+0

यह वह जवाब नहीं था जिसे मैं ढूंढ रहा था, लेकिन ऐसा लगता है कि ढांचे की वजह से मैं जिस व्यवहार की तलाश में था उसका समर्थन नहीं कर रहा था। धन्यवाद! – kietdlam

1

आप निम्न तरीकों में से एक में यह कर सकते हैं:

  • वस्तु स्थिर करें। (सबसे आसान लेकिन हमेशा कुशल नहीं)
  • सीरियलाइज -> भेजें -> प्राप्त करें -> deserialize। यदि आपकी कक्षा धारावाहिक नहीं है, तो आप JSON decoding and encoding जैसे कुछ भी उपयोग कर सकते हैं। (अधिक सिर का एक बहुत शामिल है, तो आप इस का उपयोग करने के, जब तक आप एक अच्छे कारण के लिए है चाहता हूँ न) (, अधिकांश कुशल सबसे तेजी से)
  • Parcelable

यहाँ डॉक्स से एक जैसे है: आप लपेट कर सकते हैं अपने parcelable के साथ ऑब्जेक्ट, इसे एक इरादे से संलग्न करें, और इसे प्राप्त करने वाली गतिविधि में 'अन-लपेटें'।

public class MyParcelable implements Parcelable { 
    private int mData; 

    public int describeContents() { 
     return 0; 
    } 

    public void writeToParcel(Parcel out, int flags) { 
     out.writeInt(mData); 
    } 

    public static final Parcelable.Creator<MyParcelable> CREATOR 
      = new Parcelable.Creator<MyParcelable>() { 
     public MyParcelable createFromParcel(Parcel in) { 
      return new MyParcelable(in); 
     } 

     public MyParcelable[] newArray(int size) { 
      return new MyParcelable[size]; 
     } 
    }; 

    private MyParcelable(Parcel in) { 
     mData = in.readInt(); 
    } 
} 
-1

समाधान में से एक:

StorageManager.getInstance().saveSomething(Object obj); 

तो संबंधित गेटर विधि

साथ वापस पुनः प्राप्त:

आप इच्छित जानकारी

उदाहरण के लिए

ले जाने के लिए एक सिंगलटन वर्ग बना सकते हैं

सुनिश्चित करें कि आप सिंक्रनाइज़ेशन समस्याओं का ख्याल रखते हैं;)

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