एकाधिक टुकड़ों के साथ गतिविधि के लिए वापस ढेर कैसे पॉप?
मान लें मैं एक गतिविधि है जो दो FrameLayouts शामिल है (चलो उन्हें FrameA और FrameB कहते हैं) जो बारी में प्रत्येक कोई खंड (उन्हें FragmentA1 और FragmentB1 क्रमशः कॉल)। अब, मैं निम्न के समान कोड का उपयोग कर व्यक्ति टुकड़ा लेनदेन की एक श्रृंखला ...
getFragmentManager()
.beginTransaction()
.replace(frameId, fragment)
.addToBackStack(null)
.commit();
... ऐसा है कि मैं FragmentA2 साथ FrameA में FragmentA1 की जगह के लिए प्रतिबद्ध है, तो मैं FragmentB1 FrameB में FragmentB2 साथ फिर मैं की जगह, FragmentA2 के साथ FragmentA2 को FragmentA3 के साथ बदलें, फिर मैं FragmentB2 को FragmentB3 के साथ फ़्रेम 2 में प्रतिस्थापित करता हूं, और अंतिम स्थिति ऊपर की तस्वीर की तरह दिखती है (जहां केवल FragmentA3 और FragmentB3 दिखाई दे रहे हैं)।
अगर मैं सही ढंग से समझता हूं कि बैक स्टैक कैसे काम करता है, तो 'बैक' दबाकर फ्रेमए और फ्रेमबी के बीच फ्रैगमेंट्स को पॉप-इन करना होगा (यह दर्शाता है कि मैंने उन्हें कैसे जोड़ा)।
क्या किसी को पता है कि फ्रेमए या फ्रेमबी पर अंतिम लेनदेन को चुनिंदा रूप से पॉप करना संभव है? (यानी अगर मैं 'पॉप FrameA' तो FrameA FragmentA3 से FragmentA2 और, बजाय, अगर मैं 'पॉप FrameB' दबाया तो FrameB वापस FragmentB3 से FragmentB2 में संक्रमण किया जा जाएगा करने के लिए वापस से संक्रमित कर दिया जाएगा दबाया)
अनुपूरक: मुझे पता है कि मैं
FragmentManager.findFragmentById(int framelayoutId)
विधि का उपयोग करके दिए गए फ़्रेमलेआउट में अंतिम रूप से जोड़ा गया टुकड़ा प्राप्त कर सकता हूं, लेकिनFragmentTransaction.remove(fragment).commit()
पर कॉल करने से केवल फ्रैगमेंट को दृश्य से हटा दिया जाता है और दृश्य को वापस पहले से प्रदर्शित किए गए टुकड़े में परिवर्तित नहीं किया जाता है।
FragmentTransaction.remove "केवल देखने से टुकड़ा निकाल देता है और दृश्य संक्रमण नहीं है", तो क्या में दिखाया जा रहा है विचार? लेकिन मैं देख सकता हूं कि यह क्यों भ्रम पैदा कर सकता है अगर एमजीआर टुकड़ों का एक ढेर रखता है लेकिन यह पता नहीं है कि कौन से लोग एक साथ दिखाई दे रहे हैं, यानी, यह कैसे पता चलेगा कि ए 2 "ए के नीचे" है जब बी 2 उनके बीच हो सकता है ढेर? – gordonwd
यदि कोई दृश्य (मेरे मामले में फ़्रेमलाउट) में 'FragmentTransaction.add (int, Fragment)' विधि का उपयोग करके इसमें कई टुकड़े जोड़े गए हैं, तो 'FragmentTransaction.remove (Fragment) .commit()' को कॉल करना मुझे विश्वास है कि मैं छोड़ दूंगा फ्रेमलेआउट ने आखिरी बार फ्रैगमेंट दिखाया। हालांकि, 'FragmentTransaction.replace (int, Fragment)' विधि का उपयोग करके दृश्य में टुकड़े जोड़ना (जैसा कि मैं कर रहा हूं, यह मानते हुए कि यह स्मृति के लिए बेहतर है ?!) फ्रेमलेआउट को कम-से-कम छोड़ देगा (यानी खाली दृश्य के रूप में दिखा रहा है) ... –
मेरी पिछली टिप्पणी में जोड़ने के लिए: मैं देख सकता हूं कि कुछ उपयोगी तरीके जैसे 'FragmentManager.getBackStackEntryAt (int अनुक्रमणिका)', 'FragmentManager।पॉपबैकस्टैक (स्ट्रिंग नाम, इंट फ्लैग) ', 'पॉपबैकस्टैक (इंट आईडी, इंट फ्लैग)', 'फ्रैगमेंट ट्रांज़ेक्शन.एडटीओ बैकस्टैक (स्ट्रिंग नाम)' और 'फ्रैगमेंट ट्रान्सक्शन.रेप्लेस (इंट कंटेनर व्यूआईडी, फ्रैगमेंट फ्रैगमेंट, स्ट्रिंग टैग)', बस सुनिश्चित नहीं है मुझे जो चाहिए उसे प्राप्त करने के लिए उन्हें एक साथ कैसे पूल करें ... –