attachToRoot को सही पर सेट करें:
attachToRoot सही पर सेट किया जाता है, तो लेआउट पहले पैरामीटर में निर्दिष्ट फ़ाइल फुलाया और ViewGroup दूसरा पैरामीटर में निर्दिष्ट से जुड़ा हुआ है।
कल्पना कीजिए कि हमने एक एक्सएमएल लेआउट फ़ाइल में एक बटन निर्दिष्ट किया है जिसमें इसकी लेआउट चौड़ाई और लेआउट ऊंचाई match_parent पर सेट है।
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/custom_button">
</Button>
अब हम प्रोग्राम के रूप में एक टुकड़ा या गतिविधि के अंदर एक LinearLayout को यह बटन जोड़ना चाहते हैं। यदि हमारे LinearLayout पहले से ही एक सदस्य चर रहा है, mLinearLayout, हम बस बटन निम्नलिखित के साथ जोड़ सकते हैं:
inflater.inflate(R.layout.custom_button, mLinearLayout, true);
हम निर्दिष्ट है कि हम अपने लेआउट संसाधन फ़ाइल से बटन को बढ़ाने के लिए चाहते हैं; फिर हम लेआउट इन्फ्लेटर को बताते हैं कि हम इसे mLinearLayout से जोड़ना चाहते हैं। हमारे लेआउट पैरामीटर सम्मानित हैं क्योंकि हम जानते हैं कि बटन एक लीनियरलाउट में जोड़ा जाता है। बटन का लेआउट पैराम्स प्रकार LinearLayout होना चाहिए। LayoutParams।
attachToRoot झूठी (गलत उपयोग की आवश्यकता नहीं)
attachToRoot गलत पर सेट है, तो लेआउट पहले पैरामीटर में निर्दिष्ट फ़ाइल फुलाया जाता है और नहीं से जुड़ी इस पर सेट करें ViewProup दूसरे पैरामीटर में निर्दिष्ट है, लेकिन फुलाए गए माता-पिता के लेआउट पैराम प्राप्त करते हैं जो उस दृश्य को माता-पिता में सही ढंग से फिट करने में सक्षम बनाता है।
की है जब आप गलत पर attachToRoot सेट करना चाहते हैं पर एक नज़र डालते हैं। इस परिदृश्य में, inflate() के पहले पैरामीटर में निर्दिष्ट दृश्य समय बिंदु पर दूसरे पैरामीटर में ViewGroup से जुड़ा हुआ नहीं है।
पहले से हमारे बटन उदाहरण को याद करें, जहां हम लेआउट फ़ाइल से mLinearLayout पर एक कस्टम बटन संलग्न करना चाहते हैं। हम अभी भी अटूट टॉर रूट के लिए झूठ में गुजरकर हमारे बटन को mLinearLayout से जोड़ सकते हैं- हम इसे मैन्युअल रूप से बाद में जोड़ते हैं। कोड की
Button button = (Button) inflater.inflate(R.layout.custom_button, mLinearLayout, false);
mLinearLayout.addView(button);
इन दो पंक्तियों को हम क्या कोड की एक पंक्ति में पहले लिखा था जब हम attachToRoot के लिए सच में पारित करने के लिए बराबर हैं। झूठ बोलकर, हम कहते हैं कि हम अभी तक रूट व्यू ग्रुप पर अपना व्यू संलग्न नहीं करना चाहते हैं। हम कह रहे हैं कि यह समय पर किसी अन्य बिंदु पर होगा। इस उदाहरण में, समय में दूसरा बिंदु बस मुद्रास्फीति के नीचे उपयोग की गई addView() विधि है।
झूठी अटैचमेंट टोर रूट उदाहरण को थोड़ा और काम करने की आवश्यकता होती है जब हम मैन्युअल रूप से व्यू ग्रुप में व्यू जोड़ते हैं।
attachToRoot गलत पर सेट (गलत आवश्यकता होती है)
जब बढ़ा-चढ़ाकर और onCreateView (में एक टुकड़ा के दृश्य लौटने), attachToRoot के लिए झूठी में पारित करने के लिए सुनिश्चित करें। यदि आप सच में गुजरते हैं, तो आपको एक IllegalStateException मिलेगा क्योंकि निर्दिष्ट बच्चे के पास पहले से ही एक अभिभावक है। आपको यह निर्दिष्ट करना चाहिए था कि आपकी फ्रैगमेंट का दृश्य आपकी गतिविधि में वापस रखा जाएगा। FragmentManager का काम Fragments जोड़ने, हटाने और बदलने के लिए है।
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragment = fragmentManager.findFragmentById(R.id.root_viewGroup);
if (fragment == null) {
fragment = new MainFragment();
fragmentManager.beginTransaction()
.add(R.id.root_viewGroup, fragment)
.commit();
}
root_viewGroup कंटेनर है कि आपके गतिविधि में अपने टुकड़ा का आयोजन करेगा() ViewGroup पैरामीटर अपने टुकड़ा में onCreateView में आप के लिए दिया जाता है। यह ViewGroup भी है जिसे आप लेआउटइनफ्लर.inflate() में पास करते हैं। FragmentManager इस दृश्य समूह को आपके Fragment के दृश्य को संलग्न करने में संभाल करेगा, हालांकि। आप इसे दो बार संलग्न नहीं करना चाहते हैं। संलग्न करने के लिए संलग्न करें।
public View onCreateView(LayoutInflater inflater, ViewGroup parentViewGroup, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_layout, parentViewGroup, false);
…
return view;
}
क्यों हम अपने टुकड़ा की मूल ViewGroup दिया जाता है पहली जगह में अगर हम onCreateView में संलग्न कर दें नहीं करना चाहते()? Inflate() विधि रूट व्यू समूह का अनुरोध क्यों करती है?
यह पता चला है कि जब भी हम अपने माता-पिता व्यू ग्रुप में तुरंत हमारे नए फुले हुए दृश्य को नहीं जोड़ रहे हैं, तब भी हमें नए दृश्य को अपने आकार और स्थिति को निर्धारित करने के लिए माता-पिता के लेआउट पैराम का उपयोग करना चाहिए।
लिंक: https://youtu.be/1Y0LlmTCOkM?t=409
संबंधित: [LayoutInflater की भावना बनाना] (http://stackoverflow.com/questions/5026926/making-sense-of-layoutinflater) – blahdiblah
डुप्लिकेट: https://stackoverflow.com/questions/22326314/ अटूट-टू-रूट-इन-लेआउट-inflater – mikebabcock