2013-01-01 12 views
45

ठीक है तो मैं इस तरह से क्या करना चाहता हूं इस पर रुका हुआ हूं। तो मेरे पास मुख्य गतिविधि है, और वहां से एक गतिविधि को डिग्री प्लानएक्टिविटी में लॉन्च किया जा सकता है, और वहां से एक और गतिविधि को संपादित करने के लिए संपादित किया जा सकता है। मुझे एंड्रॉइडमैनीप्लान में एंड्रॉइडमैनेप्लान में नो हिस्ट्री में सेट किया गया है। समस्या यह है कि वे EditDegreePlan को सहेजने के बाद यह एक गतिविधि को DegreePlan पर लॉन्च करता है। तो यदि उपयोगकर्ता वापस दबाता है तो उन्हें फिर से मुख्य क्रियाशीलता प्राप्त करने के लिए इसे दो बार दबा देना होगा। मैं इससे छुटकारा पाना चाहता हूं इसलिए उन्हें केवल इसे एक बार दबा देना है। मैं हालांकि यह कैसे करना है पर फंस गया हूँ।एंड्रॉइड को पीछे की स्टैक से हटाएं

यदि मैंने डिग्री इतिहास के लिए DegreePlanActivity सेट किया है तो वे EditDegreePlan में वापस उस पर वापस नहीं दबा सके।

मैंने बैकप्रेस विधि पर ओवरराइड करने और मुख्य गतिविधि के लिए एक उद्देश्य लॉन्च करने का प्रयास किया है। समस्या यह है कि उन्हें ऐप से बाहर निकलने के लिए कई बार वापस दबा देना होगा।

मुझे क्या करना चाहिए?

+11

लिखने खत्म() startActivity विधि के बाद –

उत्तर

95

FLAG_ACTIVITY_CLEAR_TOP स्पष्ट अपनी गतिविधि ढेर, आप कोड का उपयोग कर सकते हैं:

Intent intent = new Intent(this, Activity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

याद रखें कि इस ध्वज को साफ करता है बस मध्यवर्ती क्रियाएँ, उदाहरण के लिए यदि आप अपने Back Stack में ए, बी, सी है तो सी गतिविधि से जा रहा इस ध्वज के साथ डी स्पष्ट Back Stack और स्टैक ए, बी, सी, डी होगा, लेकिन यदि आप गतिविधि डी से गतिविधि ए में जाते हैं तो इस ध्वज के साथ, बी, सी, डी गतिविधियां ढेर से पॉप अप हो जाएंगी और आपके पास बैक स्टैक में केवल ए होगा।

+0

धन्यवाद! यह पूरी तरह से काम किया।मैं AndroidManifest से NoHistory को हटाने में भी सक्षम था। बस EditDegreePlanActivity की सहेजी गई विधि को कोड की एक पंक्ति जोड़कर सबकुछ ठीक कर दिया गया है। – Emrys90

+0

कार्य के साथ उन गतिविधियों को कैसे झुकाएंएफ़िनिटी = ""; ? – ralphgabb

+0

वाह, यह एक महान विशेषता है। मुझे विश्वास नहीं है कि यह वास्तव में मेरी ज़रूरतों को पूरा करता है और मेल खाता है। मेरे पास पृष्ठभूमि एसिंक सेवा है जो बारकोड स्कैन करती है। और विशिष्ट बारकोड पर यह कुछ गतिविधियों को शुरू करता है। और कुछ मामलों में मुझे ढेर से कुछ प्रारंभिक गतिविधियों को हटाने की जरूरत है। यह बस महान काम करता है! –

6

ऐसा लगता है कि यदि आप किसी झंडे को निर्दिष्ट नहीं करते हैं तो आपको वांछित व्यवहार मिलेगा। बैक बटन सिर्फ सही काम करेगा। अपने कोड के भीतर से एक गतिविधि बंद करने के लिए finish() विधि का उपयोग करें, यह वही प्रभाव डालता है जैसे उपयोगकर्ता बैक बटन दबा रहा है। तो जब आप EditDegreePlan को पूरा करते हैं तो आप स्वचालित रूप से DegreePlan पर पहुंच जाएंगे, किसी भी Intents को कॉल करने की आवश्यकता नहीं है। > DegreePlanActivty - -> EditDegreePlan -> DegreePlan -> MainActivty

अवहेलना इन अपने "DegreePlan"

public void onBackPressed() { 
    super.onBackPressed(); 
    Intent goToMainActivity = new Intent(getApplicationContext(), MainActivity.class); 
    goToMainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // Will clear out your activity history stack till now 
    startActivity(goToMainActivity); 
} 
5

यहाँ अपने प्रवाह है Android tutorials में वर्णित अनुसार, जब आप EditDegreePlan-Activity लॉन्च करते हैं, तो आप startActivity() की बजाय startActivityForResult() का उपयोग करेंगे।

EditDegreePlan-गतिविधि में आप तो

setResult(RESULT_OK); 
finish(); 

फोन आप EditDegreePlan-गतिविधि से कोई भी डेटा की उम्मीद नहीं है, तो आप जरूरी onActivityResult लागू करने के लिए नहीं है।

7

मैं अंदर विधि

MainActivity:

+0

अविश्वसनीय विचार! मेरा उपयोग मामला: एक साधारण लॉगिन गतिविधि (जो उपयोगकर्ता गतिविधि के लिए निर्बाध, एक पंजीकरण गतिविधि का कारण बन सकती है), जब लॉगिन किया जाता है, तो एक सुविधा गतिविधि खोलें। यदि उपयोगकर्ता वापस हिट करता है, तो मुझे अपनी पहली गतिविधि (जिसने लॉगिन शुरू किया) दिखाया जाना चाहिए। समाधान: लॉगिन और पंजीकरण गतिविधियों को अब 'startActivityForResult' के साथ बुलाया जाता है। जब वे पूरा हो जाते हैं, तो वे ढेर से बाहर होते हैं। धन्यवाद! – danguilherme

6

एपीआई के लिए सरल समाधान> = 15 एपीआई 23 उद्देश्य में उपयोगकर्ता गतिविधि का नाम।

Intent nextScreen = new Intent(currentActivity.this, MainActivity.class); 
nextScreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK); 
startActivity(nextScreen); 
ActivityCompat.finishAffinity(currentActivity.this); 
+0

बहुत बढ़िया! कुछ वर्तमान के लिए Thnx। – CelticParser

2

उपयोग इस ढेर खाली करने के लिए:

menuIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
संबंधित मुद्दे