2013-03-27 8 views
21

से एक विशिष्ट खंड हटाएं एंड्रॉइड टैबलेट एप्लिकेशन के लिए मैं 2 टुकड़े का उपयोग करता हूं। स्क्रीन पर बाईं ओर एक और दाईं ओर एक। जब आप दाएं टुकड़े पर एक बटन पर क्लिक करते हैं, तो सही टुकड़े के शीर्ष पर एक और टुकड़ा जोड़ा जाएगा। यह खंड बैकस्टैक में जोड़ा गया है।एंड्रॉइड बैकस्टैक

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.add(R.id.fragmentlayout, fragment2); 
ft.addToBackStack("Fragment2"); 
ft.commit(); 

backstack अब है:

[टुकड़ा 1] -> [टुकड़ा 2]

बाईं ओर भी एक बटन बाईं टुकड़ा के शीर्ष पर एक टुकड़ा खुलती (एक ही है खंड 2 के रूप में) और इसे बैकस्टैक में जोड़ता है। > [टुकड़ा 2] - -> [टुकड़ा 3]

टुकड़ा 2 पर एक बटन है कि टुकड़ा बंद करने के लिए है backstack अब

[टुकड़ा 1] है।

getFragmentManager().popBackStack("Fragment2", FragmentManager.POP_BACK_STACK_INCLUSIVE); 

समस्या तब होती है जब मैं केवल [खंड 2] बंद करना चाहता हूं, [खंड 3] भी नष्ट हो जाएगा। मैं

FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); 
ft.remove(fragment2).commit(); 

फोन करके टुकड़ा manualy निकाल सकते हैं लेकिन backstack रहेगा

[टुकड़ा 1] -> [(भूत) टुकड़ा 2] -> [टुकड़ा 3]

तो आप की जरूरत एप्लिकेशन को बंद करने के लिए एक बार फिर से दबाएं।

क्या बैकस्टैक से केवल [खंड 2] को हटाने और स्क्रीन पर [खंड 3] छोड़ने का कोई तरीका है?

+4

AFAIK, यह संभव नहीं है। यह एक कारण है जिसे इसे ढेर कहा जाता है। –

+0

आपको खाली टुकड़े के साथ इसे बदलकर पिछले खंड को हटाने की जरूरत है, केवल तभी आप Fragment 3 छोड़ने में सक्षम होंगे। – GrIsHu

उत्तर

5

आप बस अपना खुद का बैक स्टैक बना सकते हैं और onBackPressed() ओवरराइड कर सकते हैं और इसे फिट बैठकर किसी भी फैशन में संभाल सकते हैं। मुझे नहीं लगता कि वांछित व्यवहार प्राप्त करने का कोई और तरीका है।

आपकी खुद की बैक स्टैक आपके टुकड़ों के लिए टैग की ArrayList हो सकती है।

0

यह समाधान केवल आपके मामले के लिए काम करता है। आपको फ्रैगमेंट 2 को बैकस्टैक में डालने की आवश्यकता नहीं है। आप क्या कर सकते हैं कोड 'ft.addToBackStack ("Fragment2") को हटा रहा है;'। Fragment2 ढेर में नहीं है। इसलिए आप Fragment2 को बंद करते हैं, और स्क्रीन पर [खंड 3] छोड़ देते हैं।

1

मैंने अभी एक समान प्रश्न का उत्तर दिया, इसलिए here's a link to that answer

कार्यान्वयन आप backstack में कहीं से भी एक Fragment दूर करने के लिए अनुमति देता है और इस refrection का उपयोग कर आंतरिक चर कि FragmentManagerImpl और BackStackRecord में backstack जानकारी स्टोर को संशोधित करने के द्वारा हासिल की है।

हालांकि मैं इसका उपयोग प्रोत्साहित नहीं करता हूं, मुझे उम्मीद है कि इससे मदद मिलती है।

0

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

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