मैं Fragment
के Id
कैसे सेट कर सकता हूं ताकि मैं getSupportFragmentManager().findFragmentById(R.id.--)
का उपयोग कर सकूं?एंड्रॉइड - सेट खंड आईडी
उत्तर
आप एक खंड की आईडी प्रोग्रामेटिक रूप से सेट नहीं कर सकते हैं।
हालांकि, String tag
है कि आप FragmentTransaction के अंदर सेट कर सकते हैं जिसका उपयोग फ्रैगमेंट की विशिष्ट पहचान के लिए किया जा सकता है।
जैसा कि Aleksey ने बताया, आप FragmentTransaction
की add(int, Fragment)
विधि पर एक आईडी पास कर सकते हैं। हालांकि, यह एक टुकड़े के लिए आईडी निर्दिष्ट नहीं करता है। यह Fragment
डालने के लिए ViewGroup
की आईडी निर्दिष्ट करता है। यह आपके लिए अपेक्षित उद्देश्य के लिए उपयोगी नहीं है, क्योंकि यह विशिष्ट रूप से Fragment
एस की पहचान नहीं करता है, लेकिन ViewGroup
एस। ये आईडी कंटेनर हैं जो एक या अधिक टुकड़ों को गतिशील रूप से जोड़ा जा सकता है। Fragment
एस की पहचान करने के लिए ऐसी विधि का उपयोग करने के लिए आपको प्रत्येक Fragment
डालने के लिए लेआउट में ViewGroup
गतिशील रूप से जोड़ने की आवश्यकता होगी। वह बहुत बोझिल होगा।
इसलिए यदि आपके प्रश्न एक टुकड़ा आप गतिशील रूप से जोड़ रहे हैं के लिए अद्वितीय पहचानकर्ता बनाने का तरीका है, इस सवाल का जवाब उपयोग करने के लिए FragmentTransaction
के add(int containerViewId, Fragment fragment, String tag) विधि और FragmentManager
के findFragmentByTag(String) तरीका है।
मेरे ऐप्स में से एक में, मुझे तारों को गतिशील रूप से उत्पन्न करने के लिए मजबूर होना पड़ा। लेकिन यह वास्तव में वास्तविक FragmentTransaction के सापेक्ष महंगा नहीं है, वैसे भी।
टैग विधि का एक अन्य लाभ यह है कि यह एक टुकड़े की पहचान कर सकता है जिसे यूआई में जोड़ा नहीं जा रहा है। FragmentTransaction की add(Fragment, String) विधि देखें। Fragment
के पास View
एस की आवश्यकता नहीं है! इन्हें कॉन्फ़िगरेशन परिवर्तनों के बीच क्षणिक स्थिति को बनाए रखने के लिए भी उपयोग किया जा सकता है!
ज्यादातर मामलों में आप खंड टैग के साथ-साथ आईडी का उपयोग कर सकते हैं।
आप टैग मान को FragmentTransaction.add(Fragment fragment, String tag);
में सेट कर सकते हैं। फिर आप प्रश्न में खंड खोजने के लिए FragmentManager.findFragmentByTag(String tab)
कमांड का उपयोग कर सकते हैं।
जैसा कि टॉम और अन्य पहले से ही उल्लेख करते हैं, एक टुकड़े पर एक टैग डालने और पहचान के लिए उस टैग का उपयोग करने के तरीके हैं। बाद में एक समस्या यह है कि मैं उन समाधानों के साथ आया हूं कि यह खंड तब तक टैग नहीं मिलता है जब तक यह गतिविधि (या वास्तव में, FragmentManager
) से जुड़ा हुआ न हो। अगर किसी को टैग किए जाने से पहले एक टुकड़े की पहचान करने की आवश्यकता है तो क्या करें?
मेरे समाधान अब तक दुनिया में सबसे पुरानी (जावा) चाल पर भरोसा करते हैं: एक साधारण टेम्पलेट खंड बनाएं जो इसके किसी भी निर्माता में आईडी लेता है और getFragmentId()
विधि प्रदान करता है जो उस आईडी को देता है। मैं फिर उन टुकड़ों को देता हूं जिन्हें प्रारंभिक पहचान की आवश्यकता होती है, उस टेम्पलेट का विस्तार करते हैं और; देखा! समस्या सुलझ गयी।
यह समाधान, दुर्भाग्य से, टेम्पलेट टुकड़े, प्रत्येक खंड प्रकार के लिए एक, ListFragment
, DialogFragment
या सादे पुराने Fragment
(POFO ?!) शीघ्र पहचान की जरूरत है कि का एक सेट की आवश्यकता हो सकती। लेकिन प्रदान किए गए लाभों पर विचार करते हुए, मुझे लगता है कि टुकड़ों के मामले में यह प्रबंधनीय है।
चिकित्सा घाव ऊपर फाड़ :-)
चियर्स के लिए खेद है!
बाहर निकलता है आपको खंड आईडी को जानने की आवश्यकता नहीं हो सकती है।
डॉक्स से:
public abstract Fragment findFragmentById (int id)
Finds a fragment that was identified by the given id either
when inflated from XML or as the container ID when added in
a transaction.
महत्वपूर्ण हिस्सा है "कंटेनर आईडी किसी ट्रांज़ेक्शन में जोड़ा" के रूप में।
तो:
getSupportFragmentManager()
.beginTransaction()
.add(R.id.fragment_holder, new AwesomeFragment())
.commit();
और फिर
AwesomeFragment awesome = (AwesomeFragment)
getSupportFragmentManager()
.findFragmentById(R.id.fragment_holder);
जो कुछ भी (भयानक) टुकड़ा R.id.fragment_holder में आयोजित किया जाता है आप मिल जाएगा।
टॉम के उत्तर के अलावा, विधि को विधि जोड़ने के अलावा विधि को खंड टैग का भी समर्थन करता है।
उपयोग निम्नलिखित:
getFragmentManager().beginTransaction().add(R.id.fragment_container, fragmentToBeAdded, tag).commit();
मौजूदा टुकड़ा पहचान करने के लिए:
एक टुकड़ा जोड़ने के लिए
getFragmentManager().findFragmentByTag(fragmentName);
- 1. एंड्रॉइड खंड
- 2. एंड्रॉइड खंड जब bitmap.recycle()
- 3. एंड्रॉइड खंड परRestoreInstanceState
- 4. एंड्रॉइड: आईडी
- 5. एंड्रॉइड आईडी
- 6. एसयूआईडी (सेट-यूजर आईडी)
- 7. एंड्रॉइड में बंडल आईडी
- 8. एंड्रॉइड रिसोर्स आईडी
- 9. एंड्रॉइड अद्वितीय आईडी
- 10. एंड्रॉइड रिसोर्स आईडी
- 11. एंड्रॉइड कैलेंडर, इवेंट आईडी
- 12. एंड्रॉइड जीसीएम को कैनोनिकल आईडी
- 13. खंड
- 14. खंड
- 15. java.lang.illegalstateexception गतिविधि प्रोग्राम में एंड्रॉइड खंड
- 16. एंड्रॉइड - बैक बटन और खंड बैकस्टैक
- 17. एंड्रॉइड खंड दृश्य को पुनर्स्थापित कैसे करें
- 18. एंड्रॉइड लिस्ट व्यू खंड में उदाहरण
- 19. एंड्रॉइड सामग्री प्रदाता क्वेरी खंड में
- 20. एंड्रॉइड मैप्स v2 खंड और सूचीफ्रेम
- 21. एंड्रॉइड वरीयता सक्रियता और संवाद खंड
- 22. एंड्रॉइड: इन-ऐप उत्पाद आईडी
- 23. आईडी
- 24. खंड वस्तु
- 25. खंड
- 26. खंड
- 27. खंड
- 28. खंड
- 29. खंड
- 30. खंड
अगर मैं टैग और नहीं टुकड़ा के लिए आईडी का उपयोग, कैसे होगा मैं प्रतिस्थापन कॉल का उपयोग करता हूं जिसके लिए एक खंड संसाधन आईडी की आवश्यकता होती है? – Namratha
@Namratha, आप नहीं कर सकते। –
@TomDignan एक खंड के बारे में कैसे एक ViewPager में जोड़ा जाएगा? मैं उसका टैग कैसे सेट कर सकता हूं? मैं इस स्थिति में लेनदेन का उपयोग नहीं कर सकता। – GuilhE