2009-07-30 11 views
6

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

मैं अतिरिक्त डेटा कैसे हटा सकता हूं?

Bundle bundle = getIntent().getExtras(); 
if (bundle.getBoolean("showMessage")) { 
    // ... show message that is in bundle.getString("message") 
    // remove message 
    bundle.remove("showMessage"); 
} 

लेकिन उसके बाद उन्मुखीकरण बदल संदेश अभी भी दिखाया जाएगा, इस्तेमाल किया आशय की तरह लगता है एक मैं बदल गया है, लेकिन मूल एक नहीं है:

मैं निम्नलिखित की कोशिश की। मुझे मिला एकमात्र कामकाज शो मैसेज को अतिरिक्त रूप से ओ nSaveInstanceState() में सहेजना है। क्या कोई और तरीका है? या यह जाने का रास्ता है?

उत्तर

20

(सरल) समाधान है:

के बजाय फोन करने

bundle.remove("showMessage"); 

मैं अब

getIntent().removeExtra("showMessage"); 

जो अपेक्षा के अनुरूप काम करता है का उपयोग करें। लगता है जैसे INTent()। GetExtras() एक प्रतिलिपि देता है, संदर्भ नहीं।

+0

क्षमा करें, -1। 'ऑनसेवस्टेंसस्टेट' ऐसा करने का सही तरीका है, जैसा कि @ कॉमन्सवेयर द्वारा इंगित किया गया है। –

9

आपका onSaveInstanceState() दृष्टिकोण सही उत्तर है, AFAIK।