2014-04-28 8 views
5

मेरे पास मेरे एंड्रॉइड ऐप में एक गतिविधि है जो एकाधिक विचारों/टुकड़ों के प्रतिस्थापन को संभालती है। इस गतिविधि में शीर्ष-स्तर के टुकड़ों पर नेविगेट करने के लिए नेविगेशन ड्रॉवर भी है। शीर्ष-स्तरीय टुकड़ों से आप विस्तार-स्तर के टुकड़ों पर नेविगेट कर सकते हैं।
नेविगेशन ड्रॉवर को हमेशा बाईं ओर से स्लाइड करके एक्सेस किया जा सकता है। यदि वर्तमान खंड एक शीर्ष-स्तरीय खंड है, तो नेविगेशन-ड्रॉवर को एक्शन-बार द्वारा भी एक्सेस किया जा सकता है। यदि वर्तमान खंड एक विस्तार-स्तर खंड है, तो आप एक्शन-बार (या बैक-बटन दबाकर) के माध्यम से वापस नेविगेट कर सकते हैं।बैकस्टैक साफ़ करें और शीर्ष स्तर के टुकड़े के साथ वर्तमान खंड को प्रतिस्थापित करें

आइए कहें कि मेरे पास 3 शीर्ष-स्तरीय टुकड़े हैं जिन्हें नेविगेशन ड्रॉवर के माध्यम से एक्सेस किया जा सकता है।
fragment[1], fragment[2], fragment[3]

fragment[1] से, आप विस्तार स्तरीय fragment[1.1] करने के लिए नेविगेट कर सकते हैं।

अब उपयोगकर्ता वर्तमान fragment[1.1] से शीर्ष-स्तर fragment[3] पर सीधे नेविगेट करना चाहता है। उपयोगकर्ता को केवल नेविगेशन-ड्रावर में स्लाइड करना है और fragment[3] के लिए आइटम पर क्लिक करना है।
अब, यदि उपयोगकर्ता बैक बटन हिट करता है, तो एप्लिकेशन बंद होना चाहिए (क्योंकि यह शीर्ष-स्तर के टुकड़े पर नेविगेट किया गया है)। इसलिए हर बार जब उपयोगकर्ता शीर्ष-स्तर के टुकड़े पर जाता है, तो बैकस्टैक साफ़ किया जाना चाहिए। यह जांचने के लिए कि क्या मुझे दराज संकेतक दिखाना चाहिए, मैं getBackStackEntryCount() - मान पढ़ रहा हूं और इसकी तुलना 0

सारांश के रूप में करें। मैं किसी भी शीर्ष-स्तरीय टुकड़ों में विस्तार-स्तर के टुकड़ों से नेविगेट करना चाहता हूं और बैकस्टैक साफ़ करना चाहता हूं।

समस्या

:
जब मैं
getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);,
टुकड़ा लेनदेन को क्रियान्वित करते हुए backstack स्पष्ट रिवर्स में पुनः बजाया जाता है (उदाहरण के लिए fragment[1.1] द्वारा fragment[1] के प्रतिस्थापन)। और मैं नहीं चाहता कि उन्हें फिर से खेलना पड़े। मेरे पास क्रिएटिव्यू, ऑनव्यूक्रेटेड, ऑनस्टार्ट, .. पर बहुत प्रारंभिकताएं हैं, डेटा को लाने के लिए कार्य भी शुरू कर रही हैं। और मैं वह सब छोड़ना चाहता हूं। बस एक नए शीर्ष-स्तर वाले एक के साथ विस्तार स्तर दृश्य को प्रतिस्थापित करें जो पहले से ही बैकस्टैक में नहीं था।

मुझे लेनदेन को पॉप किए बिना बैकस्टैक को साफ़ करने का कोई समाधान नहीं मिला।
क्या इस समस्या को हल करने के लिए कोई साफ समाधान है? क्या मुझे अपना खुद का बैकस्टैक-व्यवहार लागू करना है?

संपादित करें: YouTube ऐप भी इस तरह व्यवहार करता है। जब आप विस्तार से शीर्ष-स्तर पर नेविगेट करते हैं, तो बैकस्टैक साफ़ हो जाता है। लेकिन वे खंड-लेन-देन को फिर से चलाने के बिना बैकस्टैक को कैसे साफ़ करते हैं?

आपके उत्तरों के लिए धन्यवाद।

उत्तर

1

मुझे लगता है कि आपको समस्या है कि आप एक लूप में टुकड़े पॉप कर रहे हैं - मुझे लगता है। मैं आम तौर पर कस्टम एनिमेशन निर्दिष्ट करने के साथ टुकड़े के ढेर पर टुकड़े को धक्का देता हूं - दाईं ओर से नए टुकड़े में स्लाइड कहता हूं और जब इसे दाहिने ओर हमारे स्लिप को पॉप करता है। अब - यदि आपके उपयोगकर्ता ने खंड 1 के लिए नेविगेट किया है तो 1.1 फिर 1.2 आदि और जब आप एक्शन बार में होम बटन पर क्लिक करते हैं तो आप 1 पर वापस नेविगेट करना चाहते हैं - आपके लिए एक खंड 1 लेनदेन निर्दिष्ट करें। आप जो पॉपिंग करते हैं वह उस नाम का उपयोग करते हैं। PopBackStackImmediate के बजाय पॉपबैकस्टैक फ़ंक्शन का उपयोग करने पर भी विचार करें।

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