2010-12-03 14 views
9

मेरे ऐप में, मैं अपने लैंडिंग पृष्ठ से आठ चरण "विज़ार्ड" शुरू करता हूं जिसमें डेटा चरण 1 से सभी चरण 8 तक पारित किया जाता है। डेटा को बरकरार रखते हुए डेटा को बरकरार रखने के लिए कदम, मैं किसी भी गतिविधि पर फिनिश() को कॉल नहीं कर रहा हूं। हालांकि, जब सभी कदम पूरा हो जाते हैं, तो क्या कोई तरीका है कि मैं शुरू की गई सभी 8 गतिविधियों को बंद कर सकता हूं और लैंडिंग पृष्ठ पर वापस लौट सकता हूं?एक बटन के बाद समापन गतिविधियां स्टैक

यहाँ प्रकार का एक उदाहरण:

होम - चरण 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8

इस बिंदु पर, जब उपयोगकर्ता क्लिक करें "सहेजें", सभी चरणों को बंद करें (8) और होम पेज पर वापस जाएं। मैं अब तक ऐसा करने का एक नया इरादा बना रहा हूं, लेकिन मुझे एहसास है कि यह सबसे अच्छा समाधान नहीं है। एक साधारण बैक प्रेस उसे वापस 7 वें चरण में ले जाती है।

किसी भी मदद की सराहना की।

+0

"अभी भी बीच में डेटा को बरकरार रखने के लिए" ... सुनिश्चित नहीं है कि आप इसका क्या मतलब रखते हैं, लेकिन ध्यान रखें कि आप गारंटी नहीं दे सकते कि गतिविधियों में से एक को एंड्रॉइड द्वारा बंद नहीं किया जाएगा पृष्ठभूमि। सुनिश्चित करें कि आप उन पर निर्भर नहीं हैं। –

+0

@ मायारा: क्या वैसे भी मैं एंड्रॉइड को किसी भी गतिविधि को बंद करने से रोक सकता हूं? मुझे नहीं लगता कि कदम कम से कम कुछ मिनटों से अधिक समय लेते हैं। लेकिन आप कभी भी निश्चित नहीं हो सकते हैं। –

+1

नहीं, आप नहीं कर सकते। विवरण के लिए गतिविधि जीवनचक्र दस्तावेज़ीकरण को चेकआउट करें: http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle आपको किसी भी तरह से रोकना और पुनरारंभ करना ठीक से करना चाहिए, अगर कोई आपके ऐप से दूर क्लिक करता है और आता है इसे वापस –

उत्तर

20
Intent intent = new Intent(this, Home.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

यह आपकी 8 वीं स्क्रीन के बीच की सभी गतिविधियों को मार देगा और आपकी होम स्क्रीन वापस लॉन्च करेगा। आप मेनिफेस्ट लॉन्चमोड = "सिंगलटॉप" में होम स्क्रीन की एसिटिवटी भी सेट कर सकते हैं। यह लिंक देखें - developer.android.com/guide/topics/fundamentals.html#acttask

+0

बहुत बहुत धन्यवाद वरुण। उसने जादू की तरह काम किया। मुझे इसकी ही खोज थी। एक त्वरित सवाल फिर से। Manifestmode = "सिंगलटॉप" पैरामीटर के साथ मेनिफेस्ट में होम गतिविधि को सेट करने से क्या होता है? उपरोक्त कोड का उपयोग कर –

+0

होम स्क्रीन गतिविधि का एक नया उदाहरण लॉन्च करेगा। लेकिन यदि आप होम स्क्रीन के लॉन्चमोड को सिंगटटॉप के रूप में सेट करते हैं तो एसिटिविटी का केवल एक उदाहरण मौजूद होगा और इरादा को न्यूइन्टेंट (एसिटीविटी की विधि – Varun

4

एक और दृष्टिकोण प्रत्येक गतिविधि को शुरू करने के लिए StartActivityForResult (...) का उपयोग करना होगा, और गतिविधियों को समाप्त करने से पहले setResult() कॉल करें()। फिर प्रत्येक गतिविधि के AtActivityResult (...) विधि कॉल खत्म() यदि इरादा गैर-शून्य है।

यह पूर्ण ढेर बना देगा, और आखिरी खत्म होने पर स्वचालित रूप से उन्हें समाप्त कर देगा।

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (data == null) { 
     return; // back button, resume this activity 
    } 

    // Propagate result down the stack. 
    setResult(0, data); 
    finish(); 
} 

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

+0

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

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