2010-03-17 13 views
7

मेरे आवेदन में आप कई क्रियाकलापों के माध्यम से नेविगेट कर सकते हैं जब तक गतिविधि स्टैक काफी गहरा न हो।कई एंड्रॉइड गतिविधियों को एक साथ बंद करना

हम प्रत्येक गतिविधि पर एक बटन चाहते हैं जो आपको सीधे मुख्य मेनू पर ले जाएगा - यानी पहले को छोड़कर स्टैक से सभी गतिविधियां पॉप करें।

मैंने बटन को एक दृश्य में रखा है कि मैं आसानी से एप्लिकेशन में प्रत्येक गतिविधि को डाल सकता हूं, लेकिन मैं यह नहीं समझ सकता कि एक में कई गतिविधियां कैसे बंद करें।

(यदि संभव हो तो, यह अच्छा होगा अगर देखें बाहर काम कर सकता था अपने आप में बंद करने के लिए कितने क्रियाएँ होगा -। यानी ढेर अपनी ही गतिविधि है पर कितना गहरा पता लगाने)

उत्तर

16

आशय ध्वज पर एक नज़र डालें FLAG_ACTIVITY_CLEAR_TOP जो कहता है कि यह स्टैक के शीर्ष पर लक्षित गतिविधि लाता है, जो इसके ऊपर हो सकता है सब कुछ हटा रहा है। तो उस बटन का उपयोग करें जो आप अपने मुख्य मेनू को उस ध्वज सेट के साथ लक्षित करने के लिए अपनी सभी गतिविधियों में जोड़ सकते हैं।

प्रलेखन से:

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

उदाहरण के लिए, गतिविधियों से मिलकर कार्य पर विचार करें: ए, बी, सी, डी डी एक आशय है कि गतिविधि बी के घटक ले कर जाता है के साथ startActivity() कहता है, तो सी और डी होगा समाप्त और बी होना आशय दिया प्राप्त, ढेर अब से किया जा रहा है, जिसके परिणामस्वरूप: एक, बी

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

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

+0

करेगा - बस यह सुनिश्चित करना चाहते हैं कि यह बिल्कुल सही है: मुझे पहले से चिपकाया गया है ... – teedyay

+1

दरअसल - यह मेरे लिए वांछित प्रभाव था: इरादा .etFlags (ActivityFlags.ClearTop | ActivityFlags.SingleTop); – scolestock

-1

आपको लगता है कि पहली गतिविधि android:launchMode="singleTask" (more) की घोषणा कर सकता है और उसके बाद सिर्फ एक आशय के साथ शुरू करते हैं।

संपादित करें: मेरा सुझाव इस धारणा पर आधारित है कि आप गतिविधि के एक उदाहरण को वापस लौटना चाहते हैं। अन्यथा यह गलत है।

+1

यहां सिंगलटास्क के उपयोग का सुझाव देने से संकेत मिलता है कि सिंगल टास्क क्या करता है ... यह ठीक है, यह उलझन में है, और गतिविधि के व्यवहार पर इसका बहुत अधिक असर पड़ता है। तो जब तक आप समझते हैं और यह सब कुछ आपके लिए नहीं चाहते हैं, तो कृपया इसे टालें। 99% ऐप्स को केवल सामान्य या कभी-कभी एकल टॉप लॉन्च मोड का उपयोग करने की आवश्यकता होती है। – hackbod

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