AttToRoot सही पर सेट करें:
यदि संलग्नकूट को सही पर सेट किया जाता है, तो पहले पैरामीटर में निर्दिष्ट लेआउट फ़ाइल फुलाया जाता है और दूसरे पैरामीटर में निर्दिष्ट व्यूग्रुप से जुड़ा होता है।
कल्पना करें कि हमने XML लेआउट फ़ाइल में एक बटन निर्दिष्ट किया है जिसकी लेआउट चौड़ाई और लेआउट की ऊंचाई 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>
अब हम इस बटन को फ्रेग्मेंट या एक्टिविटी के अंदर रैखिक रूप से इस बटन को जोड़ना चाहते हैं। यदि हमारा रेखीय लयआउट पहले से ही एक सदस्य चर है, mLinearLayout, हम बस निम्नलिखित के साथ बटन जोड़ सकते हैं:
inflater.inflate(R.layout.custom_button, mLinearLayout, true);
हमने निर्दिष्ट किया कि हम बटन को उसकी लेआउट संसाधन फ़ाइल से बढ़ाना चाहते हैं; इसके बाद हम LayoutInflater को बताते हैं कि हम इसे mLinearLayout में संलग्न करना चाहते हैं। हमारे लेआउट मापदंडों को सम्मानित किया जाता है क्योंकि हम जानते हैं कि बटन एक रैखिकलेयआउट में जुड़ जाता है। बटन लेआउट लेआउट प्रकार LinearLayout.LayoutParams होना चाहिए।
अनुलग्नक को सेट करें गलत पर सेट करें (गलत का उपयोग करने के लिए आवश्यक नहीं)
यदि AttToRoot को झूठा सेट किया जाता है, तो पहले पैरामीटर में निर्दिष्ट लेआउट फ़ाइल फुलाया जाता है और दूसरे पैरामीटर में निर्दिष्ट ViewGroup से जुड़ा नहीं होता है, लेकिन यह फुलाया हुआ दृश्य माता-पिता के लेआउटप्रेम को प्राप्त करता है जो उस दृश्य को माता-पिता में सही ढंग से फिट करने में सक्षम बनाता है।
आइए एक नजर डालते हैं कि आप कब अटैच टू रीट को झूठा सेट करना चाहेंगे। इस परिदृश्य में, पहले पैरामीटर के इनवर्ट () में निर्दिष्ट दृश्य इस समय में दूसरे पैरामीटर में ViewGroup से संलग्न नहीं है।
पहले से हमारे बटन उदाहरण को याद करें, जहां हम एक लेआउट फ़ाइल से mLinearLayout में एक कस्टम बटन संलग्न करना चाहते हैं। हम अभी भी अपने बटन को mLinearLayout में संलग्न कर सकते हैं झूठे के लिए झूठ बोलकर संलग्न करें- हम सिर्फ मैन्युअल रूप से इसे खुद को जोड़ते हैं।
Button button = (Button) inflater.inflate(R.layout.custom_button, mLinearLayout, false);
mLinearLayout.addView(button);
कोड की ये दो पंक्तियाँ उस चीज़ के बराबर हैं जो हमने कोड की एक पंक्ति में पहले लिखी थी जब हम अनुलग्नक में सही पास हुए थे। असत्य में पास करके, हम कहते हैं कि हम अपने व्यू को रूट व्यूग्रुप से अभी जोड़ना नहीं चाहते हैं। हम कह रहे हैं कि यह किसी अन्य समय में होगा। इस उदाहरण में, समय का दूसरा बिंदु महंगाई के तुरंत बाद इस्तेमाल किया जाने वाला ऐड व्यू () तरीका है।
जब हम मैन्युअल रूप से ViewGroup में दृश्य जोड़ते हैं, तो झूठे अनुलग्नक उदाहरण को थोड़ा और काम करने की आवश्यकता होती है।
संलग्न करें झूठी पर सेट करें (झूठी आवश्यक है)
जब OnCreateView () में एक फ़्रैगमेंट के दृश्य को फुलाया और वापस किया जा रहा है, तो संलग्नक के लिए झूठे में पास होना सुनिश्चित करें। यदि आप सच में गुजरते हैं, तो आपको एक अवैध संबंध मिल जाएगा क्योंकि निर्दिष्ट बच्चे के पास पहले से ही एक माता-पिता हैं। आपको निर्दिष्ट करना चाहिए कि आपके फ्रैगमेंट का दृश्य आपकी गतिविधि में वापस कहाँ रखा जाएगा। यह 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();
}
रूट_व्यूग्रुप कंटेनर जो आपकी गतिविधि में आपके फ्रैगमेंट को रखेगा, आपके फ्रैगमेंट में onCreateView () में आपको दिया गया व्यूग्रुप पैरामीटर है। यह वह ViewGroup भी है जिसे आप LayoutInflater.inflate () में पास करते हैं। हालाँकि, FragmentManager आपके Fragment के दृश्य को इस ViewGroup से जोड़ना होगा, हालाँकि। आप इसे दो बार संलग्न नहीं करना चाहते हैं। अनुलग्नक को गलत पर सेट करें।
public View onCreateView(LayoutInflater inflater, ViewGroup parentViewGroup, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_layout, parentViewGroup, false);
…
return view;
}
अगर हम इसे onCreateView () में संलग्न नहीं करना चाहते हैं तो हमें हमारे फ्रैगमेंट के पैरेंट व्यूग्रुप को पहली जगह पर क्यों दिया गया है? क्यों फुलाव () विधि एक रूट ViewGroup अनुरोध करता है?
यह पता चला है कि जब हम तुरंत अपने माता-पिता के ViewGroup में अपने नए फुलाए हुए दृश्य को नहीं जोड़ रहे हैं, तब भी हमें नए व्यू के लिए उसके आकार और स्थिति को निर्धारित करने के लिए माता-पिता के लेआउटपार्म्स का उपयोग करना चाहिए, जब भी यह अंततः संलग्न हो।
लिंक: https://youtu.be/1Y0LlmTCOkM?t=409