2012-10-24 20 views
6

जब मैं नई गतिविधि मंशा शुरू करता हूं तो मैं बैकस्टैक साफ़ करना चाहता हूं।किसी कार्य के बैकस्टैक को साफ़ करने और केवल नई गतिविधि को छोड़ने के लिए कैसे?

मेरी समस्या का सटीक केस निम्नलिखित प्रकार है: मैं इस A> B> C> डी तरह की गतिविधियों> ई "ए" एक पंजीकरण गतिविधि और "ख" एक की पुष्टि पंजीकरण गतिविधि है। मैं चाहता हूं कि जब उपयोगकर्ता गतिविधि "बी" शुरू करे कि वह अब "ए" गतिविधि पर वापस नहीं आ सकता है, तब भी जब उपयोगकर्ता गतिविधि "सी" तक पहुंच जाता है, तो गतिविधि "ए" और "बी" दोनों बेकार होंगी, मुझे इसकी आवश्यकता नहीं है उपयोगकर्ता अब उन्हें वापस।

जब उपयोगकर्ता "सी" से "डी" गतिविधि में जाता है, तो वह "सी" पर वापस जा सकता है लेकिन यदि वह आगे "ई" गतिविधि में आगे बढ़ता है, तो वह पिछले किसी भी "सी" पर वापस नहीं जा सकता "या" डी "गतिविधियों।

अनुसंधान के एक बहुत बाद, सबसे अच्छा मुझे मिल गया झंडा उपयोग करने के लिए है: FLAG_ACTIVITY_NO_HISTORY, लेकिन यह मेरे मामले के लिए दो समस्याएं हैं:

  1. गतिविधि पर 'ए' अगर उपयोगकर्ता अपने आवेदन से दूर के लिए नेविगेट (होम स्क्रीन के लिए उदाहरण), यह उस गतिविधि को नष्ट कर देता है और इसलिए उपयोगकर्ता द्वारा दर्ज की गई सभी जानकारी खो जाती है!
  2. गतिविधि "सी" मैं इसे इतिहास (बैकस्टैक) में रखना चाहता हूं यदि उपयोगकर्ता "डी" गतिविधि पर नेविगेट करता है लेकिन जब उपयोगकर्ता "ई" गतिविधि पर जाता है तो मैं इसे हटाना चाहता हूं।

मुझे अब तक इस समस्या का हल नहीं मिल रहा है, मुझे लगता है कि वर्तमान कार्य के बैकस्टैक को साफ़ करने के लिए कुछ आसान होगा!

मेरे न्यूनतम एसडीके समर्थन 5.

अग्रिम धन्यवाद है।

+2

संभावित डुप्लिकेट पर आने से पहले गतिविधि सी खत्म: http://stackoverflow.com/questions/5794506/android-clear-the-back-stack भी देखने लायक है: http://developer.android.com/guide/components/tasks-and-back-stack.html# क्लियरिंग – jrajav

+0

http://stackoverflow.com/questions/7121700/remove-all-activities-from-back-stack-while-calling-a-new-activity – speakingcode

उत्तर

8

यदि आप एपीआई स्तर 11 या उच्चतर का उपयोग कर रहे हैं तो आप अपने इरादे पर FLAG_ACTIVITY_CLEAR_TASK जोड़ सकते हैं, जो आपके कार्य में अन्य सभी गतिविधियों को साफ़ कर देगा।

अन्यथा, यह मदद कर सकता है: Clearing the full Android activity stack on older SDKs (that lack FLAG_ACTIVITY_CLEAR_TASK)

एक और दृष्टिकोण, आप गतिविधियों तुम अब उपयोगकर्ता पर लौटने के लिए सक्षम होना चाहते हैं समाप्त करने के लिए के लिए किया जाएगा। उदाहरण के लिए, यदि आप बी पर जाने से पहले ActivityA.finish() को कॉल करते हैं, तो गतिविधि को कार्य से हटा दिया जाएगा।

जब आप गतिविधि डी शुरू करते हैं, आप इसे सी से startActivityForResult() का उपयोग शुरू कर सकते हैं, और जब आप डी बंद, सी के लिए परिणाम भेजने के लिए, और उसके बाद ई

+0

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

+1

आपको एक संदर्भ पास नहीं करना चाहिए। मैं जो कहने की कोशिश कर रहा था वह यह है कि आप startActivityForResult() विधि का उपयोग कर "सी" से "डी" गतिविधि शुरू कर सकते हैं। जब आप "ई" पर जाने का निर्णय लेते हैं, तो परिणाम "डी" गतिविधि में सेट करें, और फिर इसे समाप्त करें, जो आपको "सी" पर भेज देगा, जहां आप परिणाम सत्यापित करेंगे, और उपयोगकर्ता को "ई" पर रीडायरेक्ट करेंगे, साथ ही परिष्करण गतिविधि "सी"।यह समझाने के लिए थोड़ा जटिल है, मुझे उम्मीद है कि आपको यह मिल जाएगा। – kleinsenberg

+0

हां, यह स्पष्ट था, मैंने इसे लागू किया और यह वैसे ही काम करता था जैसा मैं चाहता हूं। आपकी सहायता के लिए धन्यवाद – Elkfrawy

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

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