2014-04-10 4 views
32

मेरे पास एक ग्राहक कोड है। सभी टुकड़ों के लिए केवल एक ही गतिविधि है यानी एक ही गतिविधि सभी टुकड़ों का प्रबंधन कर रही है।नल पैरामीटर के साथ addToBackStack का अर्थ क्या है?

MoreFragment firstFragment = new MoreFragment(); 
getSupportFragmentManager().beginTransaction() 
.replace(R.id.article_fragment, firstFragment) 
.addToBackStack(null).commit(); 

तो,

1) क्या है: टुकड़ा MoreFragment -

यह गतिविधि कि fragment-

उदाहरण के लिए की विधि अंत में किसी भी टुकड़ा के लिए निम्न कोड शामिल addToBackStack(null) का अर्थ commit() का अर्थ है?

2) आपको addToBackStack पर एक शून्य पैरामीटर पारित करने की आवश्यकता क्यों है?

3) इस तरह जोड़ा जाने के बाद उस टुकड़े को कैसे प्राप्त करें?

ऐसा लगता है कि यह कोड बेकार है क्योंकि मैंने अंतिम पंक्ति .addToBackStack(null).commit() के बिना कोड चलाया और यह बिना किसी समस्या के भाग गया।

+0

http: // डेवलपर। कुछ मामलों में android.com/reference/android/app/FragmentTransaction.html#addToBackStack(java.lang.String) आपको उस विधि को कॉल करना होगा। – Kedarnath

+0

http://stackoverflow.com/a/18846336/3330969 – Kedarnath

+2

आप खंड के नाम को नल के बजाय addToBackStack (name) में पैरामीटर के रूप में पास कर सकते हैं। यदि आप नल पास करते हैं तो आप विधि FragmentManager.popBackStackImmediate (स्ट्रिंग नाम, int झंडे) विधि का उपयोग करने में सक्षम नहीं होंगे; या पॉपबैकस्टैक (स्ट्रिंग नाम, int झंडे); क्योंकि नाम शून्य था। तो पॉपबैकस्टैक विधियां काम नहीं करेंगे। मेरा सुझाव है कि आप फ्रैगमेंट नाम को शून्य से गुजरने के बजाय पैरामीटर के रूप में पास करते हैं। – luckylukein

उत्तर

49

addToBackStack (null) का अर्थ क्या है() के बाद?

का हवाला देते हुए डॉक्स

addToBackStack बुला द्वारा(), की जगह लेनदेन में सहेजा जाता है वापस तो ढेर उपयोगकर्ता लेनदेन प्रत्यावर्तित और वापस बटन दबाने से पिछले टुकड़ा वापस ला सकता है।

आप और addToBackStack (कॉल) (जैसे अन्य ऐड() या हटाने() के रूप में) लेन-देन करने के लिए कई परिवर्तन जोड़ने, तो सभी परिवर्तनों लागू किया इससे पहले कि आप प्रतिबद्ध फोन() एक के रूप में वापस ढेर में जुड़ जाते हैं सिंगल लेनदेन और बैक बटन उन सभी को एक साथ उलट देगा।

जिस क्रम में आप एक FragmentTransaction में परिवर्तन जोड़ने कोई फर्क नहीं पड़ता है, सिवाय:

आप commit() पिछले आप एक ही कंटेनर के लिए कई टुकड़े जोड़ रहे हैं, तो आदेश कॉल करना होगा जिसमें आप उन्हें जोड़ें पदानुक्रम में दिखाई देने वाले क्रम को निर्धारित करता है।

तो आपने आखिरी बार प्रतिबद्ध किया है।

आपको addToBackStack में एक शून्य पैरामीटर क्यों पारित करने की आवश्यकता है?

यह शून्य होने की आवश्यकता नहीं है यह एक स्ट्रिंग हो सकता है। तुम सिर्फ अशक्त

सार्वजनिक सार FragmentTransaction addToBackStack (स्ट्रिंग नाम) पास

जोड़ा गया एपीआई स्तर में नहीं करना चाहते हैं 11 वापस ढेर करने के लिए इस सौदे जोड़ें। इसका मतलब यह है कि लेनदेन को पूरा करने के बाद याद किया जाएगा, और बाद में स्टैक से बाहर निकलने पर इसके ऑपरेशन को उलट दिया जाएगा।

पैरामीटर नाम इस बैक स्टैक स्थिति, या शून्य के लिए एक वैकल्पिक नाम।

के संबंध में:

लगता है जैसे इस कोड को बेकार है के रूप में मैं पिछले लाइन .addToBackStack (शून्य) के बिना कोड भाग गया .commit() और यह किसी भी समस्याओं के बिना भाग गया

यदि आप पिछले खंड में नेविगेट करना चाहते हैं तो इसे बैकस्टैक में जोड़ें। तो यह इस बात पर निर्भर करता है कि क्या आप बैकस्टैक में टुकड़ा जोड़ना चाहते हैं।

इस तरह जोड़ा जाने के बाद उस खंड को कैसे प्राप्त करें?

आपके पास पहले से ही खंड उदाहरण firstFragment है। तो मैं तुम्हें टुकड़ा बाद में

अधिक जानकारी प्राप्त द्वारा क्या मतलब है @

http://developer.android.com/guide/components/fragments.html

http://developer.android.com/reference/android/app/FragmentTransaction.html#addToBackStack(java.lang.String)

+0

आप इसे एपीआई दस्तावेज़ से अपने उत्तर में भी जोड़ सकते हैं: इस लेनदेन को पीछे के ढेर में जोड़ें। इसका मतलब यह है कि लेनदेन को पूरा करने के बाद याद किया जाएगा, और बाद में स्टैक से बाहर निकलने पर इसके ऑपरेशन को उलट दिया जाएगा। पैरामीटर्स नाम \t इस बैक स्टैक स्थिति या शून्य के लिए एक वैकल्पिक नाम। – Dyrborg

+0

तो जैसा कि मैंने समझा, बैकस्टैक में जोड़ने का पूरा उद्देश्य नेविगेशन करना है क्योंकि हम पिछली टुकड़े पर जाने के लिए बैक बटन के साथ करते हैं? –

+1

@VedPrakash, सही – Kedarnath

2

आप जवाब पदावनत कर रहे हैं पता नहीं है। आप कोड का स्निपेट नीचे का उपयोग करना चाहिए आप टुकड़े ढेर वापस करने के लिए जोड़ने के लिए नहीं करना चाहते हैं:

public static void replaceFragment (@NonNull FragmentManager fragmentManager, 
      @NonNull Fragment fragment,int frameId){ 

     checkNotNull(fragmentManager); 
     checkNotNull(fragment); 
     FragmentTransaction transaction = fragmentManager.beginTransaction(); 
     transaction.replace(frameId, fragment); 
     transaction.disallowAddToBackStack(); // <-- This makes magic! 
     transaction.commit(); 
    } 

Belowe आप प्यारा उदाहरण है कि यह कैसे उपयोग करते हैं:

GameFragment fragment = GameFragment.newInstance(mGameObject, currentQuestion); 
ActivityUtils.replaceFragment(getFragmentManager(), fragment, R.id.main); 
+0

कहां से निकल गए?मुझे प्रलेखन या FragmentTransaction स्रोत में कुछ भी नहीं दिख रहा है। – Rup

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