2011-09-24 22 views
10

जबकि का उपयोग कर आशय वस्तु हम सीधे अपने putExtra() का उपयोग कर डेटा के विभिन्न प्रकार के रख सकते हैं। हम यह भी एक Bundle वस्तु में इन अतिरिक्त डेटा डाल दिया और Intent में जोड़ सकते हैं। तो हमें क्यों चाहिए यदि हम Intent का उपयोग कर ऐसा कर सकते हैं?आशय और बंडल रिलेशन

उत्तर

7

कभी-कभी आप केवल एक few variables या values कुछ अन्य Activity को पास किए जाने, लेकिन क्या अगर आप एक bunch of variable's or values है कि आप विभिन्न Activities को पास किए जाने की है। उस मामले में आप Bundle का उपयोग करें और आसानी से आवश्यक Activity करने के लिए Bundle पारित कर सकते हैं। हर बार एक चर के गुजरने के बजाय।

+1

क्षमा करें, लेकिन यह गलत है, मुझे यह जानने का जवाब दें कि क्यों। – Reno

+0

'mExtras = नया बंडल(); 'क्या यह पर्याप्त विश्वास नहीं है? यदि नहीं जाना है तो 'Intent.java' के स्रोत कोड को स्वयं जांचें। – Reno

3

मान लें कि आपकी Bundle एक Activity से दूसरे को पास किए जाने मान लेते हैं। यही कारण है कि Intent आपको अतिरिक्त फ़ील्ड के रूप में Bundle एस जोड़ने की अनुमति देता है।

संपादित: उदाहरण के लिए आप कुछ अन्य डेटा यह बहुत एक Bundle में इस पंक्ति डाल करने के लिए सुविधाजनक है के साथ एक डेटाबेस से एक पंक्ति गुजरती हैं और एक अतिरिक्त क्षेत्र के रूप में Intent को यह Bundle जोड़ना चाहते हैं।

+0

मैं पूछ रहा हूं क्यों? हम बंडल में एक ही अतिरिक्त डेटा डालने जा रहे हैं और उस बंडल को मंशा वस्तु में जोड़ देंगे। हम सीधे इरादे वस्तु में डाल सकते हैं। है ना? –

+0

नहीं, यह नहीं है। आपके पास बस 'बंडल' हो सकता है जिसे आपको पास करने की आवश्यकता है। क्या आप वास्तव में इसे फ़ील्ड-बाय-फ़ील्ड को 'इरादे' में कॉपी करना चाहते हैं। और यदि 'बंडल' और 'इरादा' की कुंजी ओवरलैप हो जाएंगी? आप लोगों की सभी चीजों को नहीं जानते हैं, इसलिए बस याद रखें कि आप 'बंडल' को 'इरादे' में डाल सकते हैं और जब आपको इसकी आवश्यकता होती है तो आपको पता चलेगा कि क्या करना है। – Michael

+0

एक छोटा सा उदाहरण: आप कुछ अन्य डेटा के साथ डेटाबेस से एक पंक्ति पारित करना चाहते हैं। इस पंक्ति को 'बंडल' में स्टोर करना बहुत सुविधाजनक है। मेरे अनुप्रयोगों में से एक में मैं डेटाबेस से कई पंक्तियों को पारित करने के लिए 'बंडल' की एक सूची का उपयोग करता हूं। – Michael

15

जैसा कि आप देख सकते हैं, Intent आंतरिक रूप से इसे Bundle में संग्रहीत करता है।

public Intent putExtra(String name, String value) { 
    if (mExtras == null) { 
     mExtras = new Bundle(); 
    } 
    mExtras.putString(name, value); 
    return this; 
} 
1

मुझे लगता है कि @Lalit क्या मतलब मान रहा है अपनी गतिविधि हमेशा अपनी कक्षा में एक भी Bundle में विभिन्न उद्देश्यों के लिए एक ही चर उन सभी को, आप स्टोर कर सकते हैं गुजरता है और बस intent.putExtras(mBundle) का उपयोग जब भी आप का एक ही सेट की जरूरत है मापदंडों।

कि यह आसान कोड बदलने के लिए अगर एक पैरामीटर अपने कोड में अप्रचलित हो, उदाहरण के लिए होगा। जैसा:

public class MyActivity { 
    private Bundle mBundle; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     mBundle = new Bundle(); 
     mBundle.putString("parameter1", value1); 
     mBundle.putString("parameter2", value2); 
    } 
    private void openFirstActivity() { 
     Intent intent = new Intent(this, FirstActivity.class); 
     intent.putExtras(mBundle); 
     startActivity(intent); 
    } 
    private void openSecondActivity() { 
     Intent intent = new Intent(this, SecondActivity.class); 
     intent.putExtras(mBundle); 
     startActivity(intent); 
    } 
} 

OBS: पहले से ही कहा गया है, एक आंतरिक Bundle में Intent भंडार मानकों, और यह ध्यान देने योग्य बात है कि जब आप putExtras फोन, आंतरिक आशय बंडल एक ही वस्तु को इंगित नहीं करता लायक है, लेकिन इसके बजाय एक सरल for का उपयोग करके सभी चरों की एक प्रति बनाता है:

for (int i=0; i<array.mSize; i++) { 
    put(array.keyAt(i), array.valueAt(i)); 
} 
संबंधित मुद्दे