फ़्रैगमेंट
नया अपडेट | स्टेबल रिलीज़ | रिलीज़ कैंडिडेट | बीटा रिलीज़ | ऐल्फ़ा वर्शन |
---|---|---|---|---|
13 अगस्त, 2025 | 1.8.9 | - | - | - |
डिपेंडेंसी का एलान करना
Fragment पर डिपेंडेंसी जोड़ने के लिए, आपको अपने प्रोजेक्ट में Google Maven रिपॉज़िटरी जोड़नी होगी. ज़्यादा जानकारी के लिए, Google की Maven रिपॉज़िटरी पढ़ें.
अपने ऐप्लिकेशन या मॉड्यूल के लिए, build.gradle
फ़ाइल में उन आर्टफ़ैक्ट की डिपेंडेंसी जोड़ें जिनकी आपको ज़रूरत है:
ग्रूवी
dependencies { def fragment_version = "1.8.9" // Java language implementation implementation "androidx.fragment:fragment:$fragment_version" // Kotlin implementation "androidx.fragment:fragment-ktx:$fragment_version" // Compose implementation "androidx.fragment:fragment-compose:$fragment_version" // Testing Fragments in Isolation debugImplementation "androidx.fragment:fragment-testing-manifest:$fragment_version" androidTestImplementation "androidx.fragment:fragment-testing:$fragment_version" }
Kotlin
dependencies { val fragment_version = "1.8.9" // Java language implementation implementation("androidx.fragment:fragment:$fragment_version") // Kotlin implementation("androidx.fragment:fragment-ktx:$fragment_version") // Compose implementation("androidx.fragment:fragment-compose:$fragment_version") // Testing Fragments in Isolation debugImplementation("androidx.fragment:fragment-testing:$fragment_version") }
डिपेंडेंसी के बारे में ज़्यादा जानने के लिए, बिल्ड डिपेंडेंसी जोड़ना लेख पढ़ें.
सुझाव/राय दें या शिकायत करें
आपके सुझाव, शिकायत या राय से Jetpack को बेहतर बनाने में मदद मिलती है. अगर आपको कोई नई समस्या मिलती है या इस लाइब्रेरी को बेहतर बनाने के लिए आपके पास कोई सुझाव है, तो हमें बताएं. कृपया नई लाइब्रेरी बनाने से पहले, इस लाइब्रेरी में मौजूद मौजूदा समस्याओं को देखें. स्टार बटन पर क्लिक करके, किसी मौजूदा समस्या के लिए वोट किया जा सकता है.
ज़्यादा जानकारी के लिए, Issue Tracker का दस्तावेज़ देखें.
वर्शन 1.8
वर्शन 1.8.9
13 अगस्त, 2025
androidx.fragment:fragment-*:1.8.9
रिलीज़ हो गया है. वर्शन 1.8.9 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- हमने उस समस्या को ठीक कर दिया है जिसमें, ऐनिमेटर का इस्तेमाल करते समय, छिपाने की सुविधा को पॉप अप करने वाले अनुमानित बैक जेस्चर को रद्द करने पर, बाद का जेस्चर सही तरीके से ऐनिमेट नहीं होता था. (I0a400, b/384765586)
- उस गड़बड़ी को ठीक किया गया है जिसमें
setMaxLifecycle
औरpopBackStack
के कॉम्बिनेशन से, टॉप फ़्रैगमेंट को RESUMED पर ले जाने में समस्या आ सकती थी. (I3448b, b/406127576)
वर्शन 1.8.8
4 जून, 2025
androidx.fragment:fragment-*:1.8.8
रिलीज़ हो गया है. वर्शन 1.8.8 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- उस समस्या को ठीक कर दिया गया है जिसमें
setMaxLifecycle(Lifecycle.State.INITIALIZED)
की मदद से जोड़े गए फ़्रैगमेंट की स्थिति को सेव करते समयFragmentManager
क्रैश हो जाता था. इन फ़्रैगमेंट को कभीonCreate()
नहीं किया गया. इसलिए, अब इनकी कोई स्थिति सेव नहीं की गई है और न हीonSaveInstanceState()
को कॉल किया गया है. (I6e37a)
वर्शन 1.8.7
20 मई, 2025
androidx.fragment:fragment-*:1.8.7
रिलीज़ हो गया है. वर्शन 1.8.7 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- हमने एक समस्या को ठीक किया है. इस समस्या में, एक ही फ़्रेम में पॉप और बदलने की कार्रवाइयों के बाद
FragmentManager
सही स्थिति में नहीं था. इससेpopBackStack
या अनुमानित बैक जेस्चर के ज़रिए बैकस्टैक को पॉप करने पर क्रैश हो सकता था. (I50ad1) - AndroidX ट्रांज़िशन का इस्तेमाल करने की वजह से होने वाली क्रैश की समस्या को ठीक किया गया है. इस समस्या में, फ़्रैगमेंट के लगातार होने वाले ट्रांज़ैक्शन, शुरू नहीं हुए ट्रांज़िशन को रद्द करने की कोशिश करते हैं. साथ ही, AndroidX ट्रांज़िशन लाइब्रेरी, ट्रांज़िशन की स्थिति को ठीक से मिटा नहीं पाती है. (b/414612221 देखें). (Ib5235)
वर्शन 1.8.6
12 फ़रवरी, 2025
androidx.fragment:fragment-*:1.8.6
रिलीज़ हो गया है. वर्शन 1.8.6 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
FragmentContainerView
केsetOnApplyWindowInsetsListener
ओवरराइड में अब एक नल लिसनर होता है, जो फ़्रेमवर्क की अनुमति के मुताबिक होता है. (I575f0, b/282790626)
वर्शन 1.8.5
30 अक्टूबर, 2024
androidx.fragment:fragment-*:1.8.5
रिलीज़ हो गया है. वर्शन 1.8.5 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- हमने उस
IllegalStateException
को ठीक किया है जोsaveBackStack
को सिर्फ़ तब ट्रिगर करता था, जब अनुमानित बैक जेस्चर को रद्द कर दिया जाता था या उसमें रुकावट आ जाती थी. (I3387d, b/342419080)
वर्शन 1.8.4
2 अक्टूबर, 2024
androidx.fragment:fragment-*:1.8.4
रिलीज़ हो गया है. वर्शन 1.8.4 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- उस समस्या को ठीक किया गया है जिसमें Androidx Transitions का इस्तेमाल करते समय, सिस्टम के बैक बटन को तुरंत दबाने या बैक जेस्चर को तुरंत करने पर, फ़्रैगमेंट क्रैश हो जाते थे. (Ibc038, b/364804225)
- फ़्रैगमेंट में एक समस्या ठीक की गई है. इसमें, अनुमानित बैक जेस्चर को रोकने पर, फ़्रैगमेंट मैनेजर को अनडिफ़ाइंड स्थिति में भेज दिया जाता था. साथ ही, गलत फ़्रैगमेंट भी दिखता था. (If82e2, b/338624457)
AndroidFragment
केUninitializedPropertyAccessException
को ठीक किया गया है. यह समस्या तब होती थी, जब आपकेAndroidFragment
इंस्टेंस के इस्तेमाल की जा रही क्लास को डाइनैमिक तरीके से स्वैप किया जाता था. (I12dea)
वर्शन 1.8.3
4 सितंबर, 2024
androidx.fragment:fragment-*:1.8.3
रिलीज़ हो गया है. वर्शन 1.8.3 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
FragmentManager
अब अनुमानित बैक जेस्चर को हैंडल करते समय, लंबित कार्रवाइयों को सही तरीके से ध्यान में रखता है. इससे यह पक्का हो जाएगा कि सिस्टम को वापस लाने पर, अबIndexOutOfBoundsException
नहीं होगा. (I9ba32, b/342316801)AndroidFragment
को कंपोज़िशन में जोड़ने पर, अब यह क्रैश नहीं होता. ऐसा तब होता है, जब गतिविधि/फ़्रैगमेंट की स्थिति पहले से ही सेव हो. (I985e9, b/356643968)
वर्शन 1.8.2
24 जुलाई, 2024
androidx.fragment:fragment-*:1.8.2
रिलीज़ हो गया है. वर्शन 1.8.2 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
AndroidFragment
अब उन मामलों को ठीक से हैंडल करता है जहां पैरंट फ़्रैगमेंट को फ़्रैगमेंट बैक स्टैक पर रखा जाता है. इससे उस फ़्रैगमेंट पर वापस जाने पर, 'No view found for id' से जुड़ी समस्याएं नहीं होती हैं. (I94608)FragmentTransaction.add
तरीके से जोड़े गए फ़्रैगमेंट, अबViewGroup
लेने के बादonContainerAvailable
तक इंतज़ार करते हैं. इसके बाद, वेonStart()
पर जाते हैं. इससे उस एपीआई का इस्तेमाल करने वाले लोगों पर असर पड़ता है. जैसे,AndroidFragment
. अबAndroidFragment
,onStart()
के ज़रिए इसे आगे बढ़ाने से पहले,AndroidFragment
के फिर से कंपोज़िशन में शामिल होने का इंतज़ार करता है. (I94608)
वर्शन 1.8.1
26 जून, 2024
androidx.fragment:fragment-*:1.8.1
रिलीज़ हो गया है. वर्शन 1.8.1 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- उस समस्या को ठीक किया गया है जिसमें कंटेनर के बिना फ़्रैगमेंट, बैक जेस्चर का अनुमान लगाने की सुविधा शुरू करने पर तुरंत
DESTROYED
हो जाते थे. अब ये आइटम, जेस्चर पूरा होने तकCREATED
स्थिति में रहेंगे. (If6b83, b/345244539)
वर्शन 1.8.0
12 जून, 2024
androidx.fragment:fragment-*:1.8.0
रिलीज़ हो गया है. वर्शन 1.8.0 में ये कमिट शामिल हैं.
1.7.0 के बाद हुए अहम बदलाव
fragment-compose
आर्टफ़ैक्ट में अब एकAndroidFragment
Composable
शामिल है. इसकी मदद से, फ़्रैगमेंट क्लास के नाम का इस्तेमाल करके, Compose के क्रम में फ़्रैगमेंट जोड़े जा सकते हैं. यह फ़्रैगमेंट की स्थिति को सेव करने और वापस लाने की प्रोसेस को अपने-आप मैनेज करता है. इसका इस्तेमाल, फ़्रैगमेंट को बड़ा करने के लिएAndroidViewBinding
का इस्तेमाल करने के पहले से सुझाए गए तरीके के विकल्प के तौर पर किया जाना चाहिए.FragmentManager
केOnBackStackChangedListener
इंटरफ़ेस पर मौजूदonBackStackChangeCancelled
कॉलबैक अबFragmentManager
में कार्रवाइयां करने के दौरान ट्रिगर होता है. इससे, यहonBackStackChangeCommitted
कॉलबैक के ट्रिगर होने के समय के ज़्यादा करीब आ जाता है.
वर्शन 1.8.0-rc01
29 मई, 2024
androidx.fragment:fragment-*:1.8.0-rc01
रिलीज़ हो गया है. वर्शन 1.8.0-rc01 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
FragmentManagers OnBackStackChangedListener
इंटरफ़ेस पर मौजूदonBackStackChangeCancelled
कॉलबैक अबFragmentManager
में कार्रवाइयां करने के दौरान ट्रिगर होता है. इससे यहonBackStackChangeCommitted
कॉलबैक के ट्रिगर होने के समय के ज़्यादा करीब आ जाता है. (I5ebfb, b/332916112)
वर्शन 1.8.0-beta01
14 मई, 2024
androidx.fragment:fragment-*:1.8.0-beta01
रिलीज़ हो गया है. वर्शन 1.8.0-beta01 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- फ़्रैगमेंट
1.7.1
: अब अनुमानित बैक नेविगेशन की सुविधा सिर्फ़ उन लेन-देन के लिए काम करेगी जिनमें सभी फ़्रैगमेंट में Animator या Seekable Androidx Transition मौजूद है. इससे उस समस्या को ठीक किया गया है जिसमें कुछ हद तक आगे-पीछे किए जा सकने वाले लेन-देन को रद्द करने पर, काली स्क्रीन दिखती थी. (I43037, b/339169168)
वर्शन 1.8.0-alpha02
17 अप्रैल, 2024
androidx.fragment:fragment-*:1.8.0-alpha02
रिलीज़ हो गया है. वर्शन 1.8.0-alpha02 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- फ़्रैगमेंट
1.7.0-rc02
: ऐसे लॉग जोड़े गए हैं जिनसे यह पता चलेगा कि बिना किसी अन्य ट्रांज़िशन केsharedElement
सेट करने पर, वह क्यों नहीं चलेगा. (Iec48e) - फ़्रैगमेंट
1.7.0-rc02
: इस गड़बड़ी को ठीक किया गया है. इसमें, अगर किसी ऐसे लेन-देन में शेयर किया गया कोई ऐसा एलिमेंट जोड़ा जाता था जिसे ढूंढा नहीं जा सकता था, तो ऐप्लिकेशन क्रैश हो जाता था. हालांकि, लेन-देन में शामिल अन्य सभी ट्रांज़िशन को ढूंढा जा सकता था. अब लेन-देन को सही तरीके से, खोजे नहीं जा सकने वाले लेन-देन के तौर पर माना जाएगा. (I18ccd)
वर्शन 1.8.0-alpha01
3 अप्रैल, 2024
androidx.fragment:fragment-*:1.8.0-alpha01
रिलीज़ हो गया है. वर्शन 1.8.0-alpha01 में ये कमिट शामिल हैं.
नई सुविधाएं
- नए
AndroidFragment
Composable
की मदद से, फ़्रैगमेंट क्लास के नाम का इस्तेमाल करके, कंपोज़ हेरारकी में फ़्रैगमेंट जोड़े जा सकते हैं. यह फ़्रैगमेंट की स्थिति को सेव करने और वापस लाने की प्रोसेस को अपने-आप मैनेज करता है. इसका इस्तेमाल, AndroidViewBindingComposable
की जगह सीधे तौर पर किया जा सकता है.(b/312895363, Icf841)
दस्तावेज़ में बदलाव
OnBackStackChangedListener
एपीआई के लिए अपडेट किया गया दस्तावेज़. इसमें बताया गया है कि इन्हें कब कॉल किया जाता है और इनका इस्तेमाल कैसे किया जाना चाहिए. (I0bfd9)
डिपेंडेंसी अपडेट
- अब फ़्रैगमेंट, Profile Installer 1.3.1 पर निर्भर करता है.
वर्शन 1.7
वर्शन 1.7.1
14 मई, 2024
androidx.fragment:fragment-*:1.7.1
रिलीज़ हो गया है. वर्शन 1.7.1 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- अब अनुमान लगाकर वापस जाने की सुविधा सिर्फ़ उन लेन-देन के लिए काम करेगी जिनमें सभी फ़्रैगमेंट में, Animator या Seekable Androidx Transition मौजूद है. इससे उस समस्या को ठीक किया गया है जिसमें आंशिक रूप से खोजे जा सकने वाले लेन-देन को रद्द करने पर, स्क्रीन खाली हो जाती थी. (I43037, b/339169168)
वर्शन 1.7.0
1 मई, 2024
androidx.fragment:fragment-*:1.7.0
रिलीज़ हो गया है. वर्शन 1.7.0 में ये कमिट शामिल हैं.
पीछे जाने पर झलक दिखाने वाले हाथ के जेस्चर की सुविधा
- अब फ़्रैगमेंट,
Animator
का इस्तेमाल करते समय या AndroidX Transition 1.5.0 का इस्तेमाल करते समय, ऐप्लिकेशन में वापस जाने की सुविधा के लिए सहायता देते हैं. इससे उपयोगकर्ता, ट्रांज़िशन को पूरा करने या रद्द करने का फ़ैसला करने से पहले, ऐनिमेटर/ट्रांज़िशन को ढूंढकर, पिछले फ़्रैगमेंट को देखने के लिए वापस जाने के जेस्चर का इस्तेमाल कर सकते हैं.
ट्रांज़िशन सिस्टम | एक्सएमएल संसाधन | पीछे जाने पर झलक दिखाने वाले हाथ के जेस्चर की सुविधा के साथ काम करता है |
---|---|---|
Animation |
R.anim |
नहीं |
Animator |
R.animator |
हां |
फ़्रेमवर्क Transition |
R.transition |
नहीं |
AndroidX Transition के साथ Transition 1.4.1 या इससे पहले का वर्शन |
R.transition |
नहीं |
AndroidX Transition के साथ Transition 1.5.0 |
R.transition |
हां |
अगर आपने अनुमानित बैक जेस्चर की सुविधा के लिए ऑप्ट-इन किया है और इसके बाद आपको फ़्रैगमेंट में अनुमानित बैक जेस्चर की सुविधा से जुड़ी कोई समस्या दिखती है, तो कृपया फ़्रैगमेंट से जुड़ी समस्या की शिकायत करें. साथ ही, एक ऐसा सैंपल प्रोजेक्ट शामिल करें जिसमें आपकी समस्या को दोहराया जा सके. गतिविधि के onCreate()
में जाकर, FragmentManager.enabledPredictiveBack(false)
का इस्तेमाल करके, अनुमानित बैक सुविधा को बंद किया जा सकता है.
FragmentManager.OnBackStackChangedListener()
अब onBackStackChangeProgressed()
और onBackStackChangeCancelled()
उपलब्ध कराता है. इनकी मदद से, बैक जेस्चर के प्रोग्रेस इवेंट और रद्द किए गए इवेंट की जानकारी मिलती है.
Fragment Compose Artifact
एक नया fragment-compose
आर्टफ़ैक्ट बनाया गया है. यह उन ऐप्लिकेशन को सपोर्ट करने पर फ़ोकस करता है जो फ़्रैगमेंट आधारित आर्किटेक्चर से पूरी तरह से कंपोज़ आधारित आर्किटेक्चर पर माइग्रेट कर रहे हैं.
इस नए आर्टफ़ैक्ट में उपलब्ध पहली सुविधा, Fragment
पर content
एक्सटेंशन मेथड है. इसका मकसद, किसी फ़्रैगमेंट के यूज़र इंटरफ़ेस (यूआई) के लिए Compose का इस्तेमाल करना आसान बनाना है. इसके लिए, यह आपके लिए एक ComposeView
बनाता है और सही ViewCompositionStrategy
सेट करता है.
class ExampleFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = content {
// Write your @Composable content here
val viewModel: ExampleViewModel = viewModel()
// or extract it into a separate, testable method
ExampleComposable(viewModel)
}
}
वर्शन 1.7.0-rc02
17 अप्रैल, 2024
androidx.fragment:fragment-*:1.7.0-rc02
रिलीज़ हो गया है. वर्शन 1.7.0-rc02 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- ऐसे लॉग जोड़े गए हैं जिनसे यह पता चलेगा कि अन्य ट्रांज़िशन के बिना
sharedElement
को सेट करने पर, वह क्यों नहीं चलेगा. (Iec48e) - उस गड़बड़ी को ठीक किया गया है जिसमें अगर किसी लेन-देन में, खोजे नहीं जा सकने वाले शेयर किए गए एलिमेंट को जोड़ा जाता था, तो क्रैश हो जाता था. हालांकि, लेन-देन में मौजूद अन्य सभी ट्रांज़िशन खोजे जा सकते थे. अब लेन-देन को सही तरीके से, खोजे नहीं जा सकने वाले लेन-देन के तौर पर माना जाएगा. (I18ccd)
वर्शन 1.7.0-rc01
3 अप्रैल, 2024
androidx.fragment:fragment-*:1.7.0-rc01
रिलीज़ हो गया है. वर्शन 1.7.0-rc01 में ये कमिट शामिल हैं.
डिपेंडेंसी अपडेट
- अब फ़्रैगमेंट, Profile Installer 1.3.1 पर निर्भर करता है.
वर्शन 1.7.0-beta01
20 मार्च, 2024
androidx.fragment:fragment-*:1.7.0-beta01
रिलीज़ हो गया है. वर्शन 1.7.0-beta01 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
FragmentHostCallback
को अब Kotlin में लिखा गया है, ताकि होस्ट के जेनरिक टाइप की नलेबिलिटी,onGetHost()
के रिटर्न टाइप की नलेबिलिटी से मेल खाए. (I40af5)
गड़बड़ियां ठीक की गईं
- उस समस्या को ठीक किया गया है जिसमें कंटेनर में मौजूद नहीं होने वाले फ़्रैगमेंट पर, अनुमानित बैक जेस्चर का इस्तेमाल करने पर वह फ़्रैगमेंट कभी नहीं मिटता था. अब फ़्रैगमेंट को तुरंत आखिरी स्थिति में ले जाया जाएगा. (Ida0d9)
- Fragments में, अनुमानित बैक जेस्चर की मदद से, आने वाले ट्रांज़िशन को रोकने पर, व्यू के खराब होने और स्क्रीन के खाली दिखने की समस्या को ठीक किया गया है. (Id3f22, b/319531491)
वर्शन 1.7.0-alpha10
7 फ़रवरी, 2024
androidx.fragment:fragment-*:1.7.0-alpha10
रिलीज़ हो गया है. वर्शन 1.7.0-alpha10 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- Fragment की पिछली रिलीज़ में मौजूद समस्या को ठीक किया गया है. इस समस्या में,
Animator
या AndroidX ट्रांज़िशन के लिए Fragment के अनुमानित बैक सपोर्ट का इस्तेमाल करने पर, अगरaddOnBackStackChangedListener
के ज़रिए कोईFragmentManager.OnBackStackChangedListener
नहीं जोड़ा गया है, तो Fragment,handleOnBackProgressed
सेNullPointerException
दिखाएगा. (I7c835)
वर्शन 1.7.0-alpha09
24 जनवरी, 2024
androidx.fragment:fragment-*:1.7.0-alpha09
रिलीज़ हो गया है. वर्शन 1.7.0-alpha09 में ये कमिट शामिल हैं.
Fragment Compose Artifact
एक नया fragment-compose
आर्टफ़ैक्ट बनाया गया है. यह उन ऐप्लिकेशन को सपोर्ट करने पर फ़ोकस करता है जो फ़्रैगमेंट आधारित आर्किटेक्चर से पूरी तरह से कंपोज़ आधारित आर्किटेक्चर पर माइग्रेट कर रहे हैं.
इस नए आर्टफ़ैक्ट में उपलब्ध पहली सुविधा, Fragment
पर content
एक्सटेंशन मेथड है. इसका मकसद, किसी फ़्रैगमेंट के यूज़र इंटरफ़ेस (यूआई) के लिए Compose का इस्तेमाल करना आसान बनाना है. इसके लिए, यह आपके लिए एक ComposeView
बनाता है और सही ViewCompositionStrategy
सेट करता है. (561cb7, b/258046948)
class ExampleFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = content {
// Write your @Composable content here
val viewModel: ExampleViewModel = viewModel()
// or extract it into a separate, testable method
ExampleComposable(viewModel)
}
}
नई सुविधाएं
FragmentManager.OnBackStackChangedListener()
अबonBackStackChangeProgressed()
औरonBackStackChangeCancelled()
उपलब्ध कराता है. इनकी मदद से, बैक जेस्चर के प्रोग्रेस इवेंट और रद्द किए गए इवेंट की जानकारी मिलती है. (214b87)
आम समस्या
Animator
या AndroidX ट्रांज़िशन के लिए, Fragment के अनुमानित बैक सपोर्ट का इस्तेमाल करते समय, अगरaddOnBackStackChangedListener
के ज़रिए कोईFragmentManager.OnBackStackChangedListener
नहीं जोड़ा गया है, तो Fragments,handleOnBackProgressed
सेNullPointerException
थ्रो करेंगे. लिसनर को मैन्युअल तरीके से जोड़ने पर, क्रैश की समस्या ठीक हो जाएगी. इस समस्या को ठीक करने के लिए, Fragments का अगला वर्शन उपलब्ध होगा.
वर्शन 1.7.0-alpha08
10 जनवरी, 2024
androidx.fragment:fragment-*:1.7.0-alpha08
रिलीज़ हो गया है. वर्शन 1.7.0-alpha08 में ये कमिट शामिल हैं.
खाली करने के लिए जगह
- ट्रांज़िशन लाइब्रेरी के लिए, कामचलाऊ समाधान को हटा दिया गया है. इस समस्या को Transition
1.5.0-alpha06
में ठीक कर दिया गया है. (I04356)
वर्शन 1.7.0-alpha07
29 नवंबर, 2023
androidx.fragment:fragment-*:1.7.0-alpha07
रिलीज़ हो गया है. वर्शन 1.7.0-alpha07 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- शेयर किए गए एलिमेंट के ट्रांज़िशन को सेट करने और enter/exitTransition को सेट न करने की वजह से होने वाली
NullPointerException
गड़बड़ी को ठीक किया गया है. (I8472b) - फ़्रैगमेंट
1.6.2
से: जब किसीFragmentContainerView
का फ़्रैगमेंट बड़ा किया जाता है, तो उसकी स्थितियां, जैसे किFragmentManager
, होस्ट, और आईडी अबonInflate
कॉलबैक में ऐक्सेस की जा सकती हैं. (I1e44c, b/307427423) - फ़्रैगमेंट
1.6.2
से: फ़्रैगमेंट के सेट को हटाने के लिएclearBackStack
का इस्तेमाल करने पर, पैरंट फ़्रैगमेंट केViewModels
मिटाए जाने पर, नेस्ट किए गए किसी भी फ़्रैगमेंट केViewModel
अब मिट जाएंगे. (I6d83c, b/296173018)
वर्शन 1.7.0-alpha06
4 अक्टूबर, 2023
androidx.fragment:fragment-*:1.7.0-alpha06
रिलीज़ हो गया है. वर्शन 1.7.0-alpha06 में ये कमिट शामिल हैं.
डिपेंडेंसी अपडेट
- Fragments को अपडेट कर दिया गया है. अब यह Transition
1.5.0-alpha04
में जोड़े गए नएanimateToStart
API पर निर्भर करता है.
वर्शन 1.7.0-alpha05
20 सितंबर, 2023
androidx.fragment:fragment-*:1.7.0-alpha05
रिलीज़ हो गया है. वर्शन 1.7.0-alpha05 में ये कमिट शामिल हैं.
नई सुविधाएं
- AndroidX ट्रांज़िशन का इस्तेमाल करते समय, फ़्रैगमेंट अब अनुमानित बैक बटन की सुविधा के साथ काम करते हैं. इससे, ट्रांज़ैक्शन को पूरा करने या रद्द करने का फ़ैसला करने से पहले, कस्टम AndroidX ट्रांज़िशन के साथ पिछले फ़्रैगमेंट पर जाने के लिए, बैक जेस्चर का इस्तेमाल किया जा सकता है. इस सुविधा को चालू करने के लिए, आपको ट्रांज़िशन
1.5.0-alpha03
रिलीज़ पर निर्भर रहना होगा. (Ib49b4, b/285175724)
ऐसी समस्याएं जिनके बारे में जानकारी पहले से है
- फ़िलहाल, एक समस्या आ रही है. इसमें, ट्रांज़िशन के साथ बैक जेस्चर को एक बार रद्द करने के बाद, अगली बार बैक जेस्चर शुरू करने पर ट्रांज़िशन नहीं चलेगा. इससे स्क्रीन खाली हो जाएगी. ऐसा ट्रांज़िशन लाइब्रेरी में किसी समस्या की वजह से हो सकता है. (b/300157785). अगर आपको यह समस्या दिखती है, तो कृपया Fragment के ख़िलाफ़ समस्या की शिकायत करें. साथ ही, एक ऐसा सैंपल प्रोजेक्ट शामिल करें जिससे आपकी समस्या को दोहराया जा सके. गतिविधि के
onCreate()
में जाकर,FragmentManager.enabledPredictiveBack(false)
का इस्तेमाल करके, अनुमानित बैक सुविधा को बंद किया जा सकता है.
वर्शन 1.7.0-alpha04
6 सितंबर, 2023
androidx.fragment:fragment-*:1.7.0-alpha04
रिलीज़ हो गया है. वर्शन 1.7.0-alpha04 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- अनुमानित बैक जेस्चर को रद्द करने पर, फ़्रैगमेंट के लाइफ़साइकल की सही स्थिति में न पहुंचने की समस्या को ठीक किया गया है. (I7cffe, b/297379023)
- ऐसी रिग्रेशन गड़बड़ी को ठीक किया गया है जिसमें ट्रांज़िशन के साथ ऐनिमेशन चलाने की अनुमति दी गई थी. (I59f36)
- फ़्रैगमेंट के साथ 'अनुमान लगाकर वापस जाएं' सुविधा का इस्तेमाल करते समय होने वाली समस्या को ठीक किया गया है. इस समस्या में, बैक स्टैक पर मौजूद आखिरी से दूसरे फ़्रैगमेंट पर तेज़ी से दो बार वापस जाने की कोशिश करने पर ऐप्लिकेशन क्रैश हो जाता था. (Ifa1a4)
वर्शन 1.7.0-alpha03
23 अगस्त, 2023
androidx.fragment:fragment-*:1.7.0-alpha03
रिलीज़ हो गया है. वर्शन 1.7.0-alpha03 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- हमने फ़्रैगमेंट से जुड़ी एक समस्या को ठीक किया है. यह समस्या, अनुमान लगाकर पीछे जाने की सुविधा का इस्तेमाल करते समय होती थी. इसकी वजह से, फ़्रैगमेंट मैनेजर के बैक स्टैक में मौजूद पहले फ़्रैगमेंट को स्किप कर दिया जाता था. साथ ही, तीन बटन वाले नेविगेशन या अनुमान लगाकर पीछे जाने के जेस्चर के ज़रिए सिस्टम बैक का इस्तेमाल करने पर, गतिविधि बंद हो जाती थी. (I0664b, b/295231788)
वर्शन 1.7.0-alpha02
9 अगस्त, 2023
androidx.fragment:fragment-*:1.7.0-alpha02
रिलीज़ हो गया है. वर्शन 1.7.0-alpha02 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- API 34 से फ़्रैगमेंट के साथ, अनुमान लगाने वाले बैक जेस्चर का इस्तेमाल करते समय, अगर ट्रांज़िशन सिस्टम का इस्तेमाल किया जा रहा है, तो फ़्रैगमेंट अब तब तक इंतज़ार करेंगे, जब तक कि जेस्चर पूरा नहीं हो जाता. ऐसा तब होगा, जब ट्रांज़िशन सिस्टम में सीकिंग (
Animations
,Transitions
) की सुविधा काम नहीं करती या कोई ट्रांज़िशन नहीं होता. (I8100c)
वर्शन 1.7.0-alpha01
7 जून, 2023
androidx.fragment:fragment-*:1.7.0-alpha01
रिलीज़ हो गया है. इस वर्शन को इंटरनल ब्रांच में डेवलप किया गया है.
नई सुविधाएं
Animator
का इस्तेमाल करते समय, फ़्रैगमेंट अब ऐप्लिकेशन में वापस जाने की अनुमानित सुविधा के साथ काम करते हैं. इससे, ट्रांज़िशन पूरा करने या रद्द करने का फ़ैसला लेने से पहले, बैक जेस्चर का इस्तेमाल करके, कस्टम ऐनिमेटर के साथ पिछला फ़्रैगमेंट देखा जा सकता है. एक्सपेरिमेंट के तौर पर उपलब्धenablePredictiveBack()
का इस्तेमाल करके औरfalse
पास करके, इस नई सुविधा को बंद किया जा सकता है.
वर्शन 1.6
वर्शन 1.6.2
1 नवंबर, 2023
androidx.fragment:fragment-*:1.6.2
रिलीज़ हो गया है. वर्शन 1.6.2 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
FragmentContainerView
के फ़्रैगमेंट के इन्फ़्लेट होने पर, अब इसकी स्थितियांFragmentManager
, होस्ट, और आईडी कोonInflate
कॉलबैक में ऐक्सेस किया जा सकता है. (I1e44c, b/307427423)- फ़्रैगमेंट के सेट को हटाने के लिए
clearBackStack
का इस्तेमाल करने पर, पैरंट फ़्रैगमेंट केViewModels
क्लियर होने पर, नेस्ट किए गए किसी भी फ़्रैगमेंट काViewModel
अब क्लियर हो जाएगा. (I6d83c, b/296173018)
वर्शन 1.6.1
26 जुलाई, 2023
androidx.fragment:fragment-*:1.6.1
रिलीज़ हो गया है. वर्शन 1.6.1 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- गतिविधि को रोकने पर सेव की गई स्थिति को तब तक गलत तरीके से कैश मेमोरी में सेव किया जाता था, जब तक उसे खत्म नहीं किया जाता था. ऐसा तब भी होता था, जब फ़्रैगमेंट इंस्टेंस को वापस
RESUMED
स्थिति में ले जाया जाता था. इस समस्या को ठीक कर दिया गया है. इससे, कैश मेमोरी में सेव की गई उस स्थिति का फिर से इस्तेमाल किया जा सकेगा. ऐसा तब होगा, जब उस फ़्रैगमेंट इंस्टेंस को सेव और वापस लाने के लिए, एक से ज़्यादा बैक स्टैक वाले एपीआई का इस्तेमाल किया जा रहा हो और वह बैक स्टैक में मौजूद हो. (I71288, b/246289075)
डिपेंडेंसी अपडेट
- अब फ़्रैगमेंट, ऐक्टिविटी 1.7.2 पर निर्भर करता है. इस अपडेट से उस समस्या को ठीक किया गया है जिसमें Kotlin का इस्तेमाल करने वाले लोग, Activity पर साफ़ तौर पर निर्भरता के बिना
ComponentDialog
को नहीं बढ़ा सकते थे. (b/287509323)
वर्शन 1.6.0
7 जून, 2023
androidx.fragment:fragment-*:1.6.0
रिलीज़ हो गया है. वर्शन 1.6.0 में ये कमिट शामिल हैं.
1.5.0 के बाद हुए अहम बदलाव
Fragment
के सेव किए गए स्टेट को पूरी तरह से दो हिस्सों में बांट दिया गया है: पहला, निजी लाइब्रेरी स्टेट (कस्टमParcelable
क्लास) और दूसरा, डेवलपर की ओर से उपलब्ध कराया गया स्टेट. यह स्टेट अब हमेशाBundle
में सेव किया जाता है. इससे यह पता लगाया जा सकता है कि फ़्रैगमेंट का स्टेट कहां से आ रहा है.FragmentManager.OnBackStackChangedListener
इंटरफ़ेस को बड़ा किया गया है. इसमेंonBackStackChangeStarted
औरonBackStackChangeCommitted
के दो और कॉलबैक जोड़े गए हैं. इन्हें हरFragment
के साथ कॉल किया जाता है. ऐसा तब होता है, जब उन्हें फ़्रैगमेंट बैक स्टैक में जोड़ा/हटाया जाता है और लेन-देन पूरा होने के तुरंत बाद.FragmentStrictMode
ने एक नयाWrongNestedHierarchyViolation
जोड़ा है. यह तब पता लगाता है, जब कोई चाइल्ड फ़्रैगमेंट अपने पेरेंट की व्यू हैरारकी में नेस्ट किया गया हो, लेकिन उसे पेरेंट केchildFragmentManager
में न जोड़ा गया हो.Fragment
औरFragmentManager
एपीआई,Intent
याIntentSender
लेते हैं. अब इन्हें@NonNull
के साथ सही तरीके से एनोटेट किया गया है, ताकि शून्य वैल्यू को पास होने से रोका जा सके. ऐसा इसलिए, क्योंकि शून्य वैल्यू हमेशा उन Android फ़्रेमवर्क एपीआई को तुरंत क्रैश कर देती है जिन्हें ये तरीके कॉल करते हैं.DialogFragment
अबrequireComponentDialog()
एपीआई के ज़रिए,ComponentDialog
के डेटा का ऐक्सेस देता है.- अब फ़्रैगमेंट, लाइफ़साइकल
2.6.1
पर निर्भर करता है. - अब फ़्रैगमेंट, SavedState
1.2.1
पर निर्भर करता है. - फ़्रैगमेंट अब ProfileInstaller
1.3.0
पर निर्भर करता है. fragment-testing-manifest
आर्टफ़ैक्ट, मेनिफ़ेस्ट एंट्री को फ़्रैगमेंट-टेस्टिंग कॉम्पोनेंट के बाकी हिस्सों से अलग करता है. इसका मतलब है कि ये काम किए जा सकते हैं:debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z") androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
इससे
fragment-testing
औरandroidx.test
के बीच वर्शन के अंतर की वजह से होने वाले टकराव से बचा जा सकता है
वर्शन 1.6.0-rc01
10 मई, 2023
androidx.fragment:fragment-*:1.6.0-rc01
रिलीज़ हो गया है. वर्शन 1.6.0-rc01 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- इस समस्या को ठीक कर दिया गया है. इसकी वजह से, एक के बाद एक कई
startActivityForResult
अनुरोध किए जाने पर, गलत अनुरोध कोड के साथActivityResult
भेजे जा रहे थे. (If0b9d, b/249519359) - उस समस्या को ठीक किया गया है जिसमें
onBackStackChangeListener
कॉलबैक, उन लेन-देन के लिए भेजे जा रहे थे जिनसे बैक स्टैक में कोई बदलाव नहीं हुआ था. ऐसा तब हो रहा था, जब उन्हें उन लेन-देन के साथ मिला दिया गया था जिनसे बैक स्टैक में बदलाव होता है. (I0eb5c, b/279306628)
वर्शन 1.6.0-beta01
19 अप्रैल, 2023
androidx.fragment:fragment-*:1.6.0-beta01
रिलीज़ हो गया है. वर्शन 1.6.0-beta01 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- टाइम आउट के साथ
postponeEnterTransition
का इस्तेमाल करने और फिर स्थगित किए गए फ़्रैगमेंट को बदलने पर, अब स्थगित किए गए फ़्रैगमेंट का डेटा लीक नहीं होता. (I2ec7d, b/276375110) - अब नए
onBackStackChangeStarted
औरonBackStackChangeCommitted
कॉलबैक, फ़्रैगमेंट को सिर्फ़ एक बार भेजेंगे. भले ही, कई लेन-देन में एक ही फ़्रैगमेंट शामिल हो. (Ic6b69)
वर्शन 1.6.0-alpha09
5 अप्रैल, 2023
androidx.fragment:fragment-*:1.6.0-alpha09
रिलीज़ हो गया है. वर्शन 1.6.0-alpha09 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
DialogFragment
अबrequireComponentDialog()
एपीआई के ज़रिए,ComponentDialog
के डेटा का ऐक्सेस देता है. (I022e3, b/234274777)commitNow()
,executePendingTransactions()
, औरpopBackStackImmediate()
एपीआई को@MainThread
के साथ एनोटेट किया गया है. इसका मतलब है कि अब ये सभी एपीआई, रनटाइम पर फ़ेल होने के बजाय, मुख्य थ्रेड से कॉल न किए जाने पर बिल्ड की गड़बड़ियां दिखाएंगे. (Ic9665, b/236538905)
गड़बड़ियां ठीक की गईं
FragmentManager
में मौजूद एक गड़बड़ी को ठीक किया गया है. इस गड़बड़ी की वजह से, एक ही फ़्रेम में सेव करने और वापस लाने की प्रोसेस के दौरान क्रैश हो सकता था. (Ib36af, b/246519668)OnBackStackChangedListener
onBackStackChangeStarted
औरonBackStackChangeCommitted
कॉलबैक अब सिर्फ़ तब लागू होते हैं, जबFragmentManager
बैक स्टैक में बदलाव किया जाता है. (I66055, b/274788957)
वर्शन 1.6.0-alpha08
22 मार्च, 2023
androidx.fragment:fragment-*:1.6.0-alpha08
रिलीज़ हो गया है. वर्शन 1.6.0-alpha08 में ये कमिट शामिल हैं.
व्यवहार में बदलाव
OnBackStackChangedListener.onBackStackChangeCommited
कॉलबैक के समय को अडजस्ट किया गया है, ताकि फ़्रैगमेंट ऑपरेशन के लागू होने से पहले इसे लागू किया जा सके. इससे यह पक्का होता है कि कॉलबैक को कभी भी ऐसा फ़्रैगमेंट नहीं भेजा जाएगा जो अलग हो गया हो. (I66a76, b/273568280)
गड़बड़ियां ठीक की गईं
- Fragment
1.5.6
: इस समस्या को ठीक किया गया है. इसमें, अगरLifecycle
पहले से हीSTARTED
था और कोई नतीजा पहले से ही उपलब्ध था, तोsetFragmentResultListener
के अंदरclearFragmentResultListener
को कॉल करने पर काम नहीं करता था. (If7458)
डिपेंडेंसी से जुड़े अपडेट
- अब फ़्रैगमेंट, लाइफ़साइकल
2.6.1
पर निर्भर करता है. (586fe7) - अब फ़्रैगमेंट, SavedState
1.2.1
पर निर्भर करता है. (078e4e) - फ़्रैगमेंट अब ProfileInstaller
1.3.0
पर निर्भर करता है. (3fc05b)
वर्शन 1.6.0-alpha07
8 मार्च, 2023
androidx.fragment:fragment-*:1.6.0-alpha07
रिलीज़ हो गया है. वर्शन 1.6.0-alpha07 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- फ़्रैगमेंट
1.5.6
: इस समस्या को ठीक किया गया है. इसमें किसी फ़्रैगमेंट को हटाने पर, गतिविधि का मेन्यू अमान्य हो जाता था. भले ही, फ़्रैगमेंट में मेन्यू आइटम जोड़े गए हों या नहीं. (50f098, b/244336571)
वर्शन 1.6.0-alpha06
22 फ़रवरी, 2023
androidx.fragment:fragment-*:1.6.0-alpha06
रिलीज़ हो गया है. वर्शन 1.6.0-alpha06 में ये कमिट शामिल हैं.
व्यवहार में बदलाव
FragmentManager
केonBackStackChangedListener
पर मौजूद नयाonBackStackChangedStarted
कॉलबैक, अब फ़्रैगमेंट के टारगेट स्टेट में जाने से पहले ही एक्ज़ीक्यूट हो जाएगा. (I34726)
वर्शन 1.6.0-alpha05
8 फ़रवरी, 2023
androidx.fragment:fragment-*:1.6.0-alpha05
रिलीज़ हो गया है. वर्शन 1.6.0-alpha05 में ये कमिट शामिल हैं.
नई सुविधाएं
FragmentManager.OnBackStackChagnedListener
इंटरफ़ेस में अब दो और कॉलबैक,onBackStackChangeStarted
औरonBackStackChangeCommitted
उपलब्ध हैं. इनकी मदद से,FragmentManager
में बैक स्टैक में बदलाव होने पर ज़्यादा जानकारी मिलती है और ज़्यादा कंट्रोल मिलता है. (Ib7ce5, b/238686802)
एपीआई में हुए बदलाव
Fragment
औरFragmentManager
एपीआई,Intent
याIntentSender
लेते हैं. अब इन्हें@NonNull
के साथ सही तरीके से एनोटेट किया गया है, ताकि शून्य वैल्यू को पास होने से रोका जा सके. ऐसा इसलिए, क्योंकि शून्य वैल्यू हमेशा उन Android फ़्रेमवर्क एपीआई को तुरंत क्रैश कर देती है जिन्हें ये तरीके कॉल करते हैं. (I06fd4)
वर्शन 1.6.0-alpha04
7 दिसंबर, 2022
androidx.fragment:fragment-*:1.6.0-alpha04
रिलीज़ हो गया है. वर्शन 1.6.0-alpha04 में ये कमिट शामिल हैं.
नई सुविधाएं
FragmentStrictMode
ने एक नयाWrongNestedHierarchyViolation
जोड़ा है. यह तब पता लगाता है, जब कोई चाइल्ड फ़्रैगमेंट अपने पेरेंट की व्यू हैरारकी में नेस्ट किया गया हो, लेकिन उसे पेरेंट केchildFragmentManager
में न जोड़ा गया हो. (I72521, b/249299268)
व्यवहार में बदलाव
- फ़्रैगमेंट अब
SavedStateRegistry
से पहले की अपनीonAttach()
स्थिति को वापस लाते हैं. इससे यह पक्का होता है कि यह सभी अपवर्ड लाइफ़साइकल के तरीकों से उपलब्ध है. (I1e2b1)
एपीआई में हुए बदलाव
fragment-testing-manifest
आर्टफ़ैक्ट, मेनिफ़ेस्ट एंट्री को फ़्रैगमेंट-टेस्टिंग कॉम्पोनेंट के बाकी हिस्सों से अलग करता है. इसका मतलब है कि ये काम किए जा सकते हैं:
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
इससे fragment-testing
और androidx.test
के बीच वर्शन के अंतर की वजह से होने वाले टकराव से बचा जा सकता है.(I8e534, b/128612536)
गड़बड़ियां ठीक की गईं
- Fragment
1.5.5
से: फ़्रैगमेंट अबViewModel
की स्थिति को, व्यू रजिस्ट्री की सेव की गई स्थिति के हिस्से के तौर पर गलत तरीके से सेव नहीं करेंगे. (I10d2b, b/253546214)
वर्शन 1.6.0-alpha03
5 अक्टूबर, 2022
androidx.fragment:fragment:1.6.0-alpha03
, androidx.fragment:fragment-ktx:1.6.0-alpha03
, और androidx.fragment:fragment-testing:1.6.0-alpha03
रिलीज़ किए गए हैं. वर्शन 1.6.0-alpha03 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
DialogFragment
को बढ़ाने वाली क्लास को अबonDismiss()
ओवरराइड में सुपर को कॉल करना होगा. (I14798, b/238928865)
गड़बड़ियां ठीक की गईं
- नए प्रोवाइडर कॉलबैक इंटरफ़ेस (
OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) को इंटिग्रेट करने की वजह से हुई रिग्रेशन की समस्याओं को ठीक किया गया है. इससे यह पक्का किया जा सकेगा कि फ़्रैगमेंट को हमेशा सही कॉलबैक मिलें. (I9b380,I34581, (I8dfe6, b/242570955),If9d6b,Id0096,I690b3,I2cba2)
वर्शन 1.6.0-alpha02
24 अगस्त, 2022
androidx.fragment:fragment:1.6.0-alpha02
, androidx.fragment:fragment-ktx:1.6.0-alpha02
, और androidx.fragment:fragment-testing:1.6.0-alpha02
रिलीज़ किए गए हैं. वर्शन 1.6.0-alpha02 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- फ़्रैगमेंट
1.5.2
से: एक ऐसी समस्या को ठीक किया गया है जिसमें एक ही समय परpopBackStack()
औरreplace()
लेन-देन को लागू करने से, बाहर निकलने वाले फ़्रैगमेंट गलतAnimation
/Animator
को चला सकते थे. (Ib1c07, b/214835303)
वर्शन 1.6.0-alpha01
27 जुलाई, 2022
androidx.fragment:fragment:1.6.0-alpha01
, androidx.fragment:fragment-ktx:1.6.0-alpha01
, और androidx.fragment:fragment-testing:1.6.0-alpha01
रिलीज़ किए गए हैं. वर्शन 1.6.0-alpha01 में ये कमिट शामिल हैं.
व्यवहार में बदलाव
Fragment
के सेव किए गए स्टेट को पूरी तरह से दो हिस्सों में बांट दिया गया है: पहला, निजी लाइब्रेरी स्टेट (कस्टमParcelable
क्लास) और दूसरा, डेवलपर की ओर से उपलब्ध कराया गया स्टेट. यह स्टेट अब हमेशाBundle
में सेव किया जाता है. इससे यह पता लगाया जा सकता है कि फ़्रैगमेंट का स्टेट कहां से आ रहा है. (b/207158202)
गड़बड़ियां ठीक की गईं
- Fragment
1.5.1
से:DialogFragmentCallbacksDetector
में रिग्रेशन की समस्या ठीक की गई है. इस समस्या की वजह से, AGP 7.4 के साथ बंडल किए गए लिंट वर्शन का इस्तेमाल करने पर, लिंट क्रैश हो जाता था. (b/237567009)
डिपेंडेंसी अपडेट
- Fragment
1.5.1
से: Fragment लाइब्रेरी अब Lifecycle2.5.1
पर निर्भर करती है. (Id204c) - Fragment
1.5.1
से: Fragment लाइब्रेरी अब Activity1.5.1
पर निर्भर करती है. (I10f07)
संस्करण 1.5
वर्शन 1.5.7
19 अप्रैल, 2023
androidx.fragment:fragment:1.5.7
, androidx.fragment:fragment-ktx:1.5.7
, और androidx.fragment:fragment-testing:1.5.7
रिलीज़ किए गए हैं. वर्शन 1.5.7 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- टाइम आउट के साथ
postponeEnterTransition
का इस्तेमाल करने और फिर स्थगित किए गए फ़्रैगमेंट को बदलने पर, अब स्थगित किए गए फ़्रैगमेंट का डेटा लीक नहीं होता. (I2ec7d, b/276375110)
वर्शन 1.5.6
22 मार्च, 2023
androidx.fragment:fragment:1.5.6
, androidx.fragment:fragment-ktx:1.5.6
, और androidx.fragment:fragment-testing:1.5.6
रिलीज़ किए गए हैं. वर्शन 1.5.6 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- उस समस्या को ठीक किया गया है जिसमें किसी फ़्रैगमेंट को हटाने पर, ऐक्टिविटी का मेन्यू अमान्य हो जाता था. भले ही, उस फ़्रैगमेंट में मेन्यू आइटम जोड़े गए हों या नहीं. (50f098, b/244336571)
- हमने उस समस्या को ठीक कर दिया है जिसमें
Lifecycle
के पहले सेSTARTED
होने और नतीजे के पहले से उपलब्ध होने पर,setFragmentResultListener
के अंदरclearFragmentResultListener
को कॉल करने पर काम नहीं करता था. (If7458)
वर्शन 1.5.5
7 दिसंबर, 2022
androidx.fragment:fragment:1.5.5
, androidx.fragment:fragment-ktx:1.5.5
, और androidx.fragment:fragment-testing:1.5.5
रिलीज़ किए गए हैं. वर्शन 1.5.5 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- अब फ़्रैगमेंट, व्यू रजिस्ट्री की सेव की गई स्थिति के हिस्से के तौर पर
ViewModel
की स्थिति को गलत तरीके से सेव नहीं करेंगे. (I10d2b, b/253546214)
वर्शन 1.5.4
24 अक्टूबर, 2022
androidx.fragment:fragment:1.5.4
, androidx.fragment:fragment-ktx:1.5.4
, और androidx.fragment:fragment-testing:1.5.4
रिलीज़ किए गए हैं. वर्शन 1.5.4 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- उस गड़बड़ी को ठीक किया गया है जिसमें कस्टम
FragmentController
का इस्तेमाल करने पर, होस्ट करने वाले ऐसे ऐप्लिकेशन के लिए चाइल्ड फ़्रैगमेंट को डिसपैच नहीं किया जा सका जो प्रोवाइडर कॉलबैक इंटरफ़ेस (OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) लागू नहीं करता है और उसके डिसपैच फ़ंक्शन को कॉल करता है. (I9b380)
वर्शन 1.5.3
21 सितंबर, 2022
androidx.fragment:fragment:1.5.3
, androidx.fragment:fragment-ktx:1.5.3
, और androidx.fragment:fragment-testing:1.5.3
रिलीज़ किए गए हैं. वर्शन 1.5.3 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- हमने उस गड़बड़ी को ठीक कर दिया है जिसकी वजह से, बैक स्टैक पर मौजूद फ़्रैगमेंट को
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
, औरonConfigurationChanged()
कॉलबैक मिलते थे. (I34581, I8dfe6, b/242570955) - नेस्ट किए गए चाइल्ड फ़्रैगमेंट को अब एक से ज़्यादा
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
याonConfigurationChanged()
कॉलबैक नहीं मिलेंगे. (I690b3, Id0096, If9d6b, I2cba2)
संस्करण 1.5.2
10 अगस्त, 2022
androidx.fragment:fragment:1.5.2
, androidx.fragment:fragment-ktx:1.5.2
, और androidx.fragment:fragment-testing:1.5.2
रिलीज़ किए गए हैं. वर्शन 1.5.2 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- उस समस्या को ठीक किया गया है जिसकी वजह से, एक ही समय में
popBackStack()
औरreplace()
लेन-देन करने पर, मौजूदा फ़्रैगमेंट गलतAnimation
/Animator
चला सकते थे. (Ib1c07, b/214835303)
संस्करण 1.5.1
27 जुलाई, 2022
androidx.fragment:fragment:1.5.1
, androidx.fragment:fragment-ktx:1.5.1
, और androidx.fragment:fragment-testing:1.5.1
रिलीज़ किए गए हैं. वर्शन 1.5.1 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
DialogFragmentCallbacksDetector
में रिग्रेशन की समस्या को ठीक किया गया है. इस समस्या की वजह से, AGP 7.4 के साथ बंडल किए गए लिंट वर्शन का इस्तेमाल करने पर, लिंट क्रैश हो जाता था. (b/237567009)
डिपेंडेंसी अपडेट
- Fragment लाइब्रेरी अब Lifecycle
2.5.1
पर निर्भर करती है. (Id204c) - अब Fragment लाइब्रेरी, Activity
1.5.1
पर निर्भर करती है. (I10f07)
वर्शन 1.5.0
29 जून, 2022
androidx.fragment:fragment:1.5.0
, androidx.fragment:fragment-ktx:1.5.0
, और androidx.fragment:fragment-testing:1.5.0
रिलीज़ किए गए हैं. वर्शन 1.5.0 में ये कमिट शामिल हैं.
1.4.0 के बाद हुए ज़रूरी बदलाव
- CreationExtras इंटिग्रेशन -
Fragment
अब Lifecycle2.5.0
केCreationExtras
के ज़रिए, बिना किसी स्टेटस केViewModelProvider.Factory
उपलब्ध करा सकता है. - कॉम्पोनेंट डायलॉग इंटिग्रेशन -
DialogFragment
अबComponentDialog
का इस्तेमाल करता है. यहonCreateDialog()
से मिले डिफ़ॉल्ट डायलॉग के तौर पर Activity1.5.0
के ज़रिए काम करता है. - सेव किए गए इंस्टेंस की स्थिति को फिर से व्यवस्थित करना - फ़्रैगमेंट, इंस्टेंस की स्थिति को सेव करने के तरीके में बदलाव करने लगे हैं. इससे यह साफ़ तौर पर पता लगाने में मदद मिलती है कि फ़्रैगमेंट में कौनसी स्थिति सेव की गई है और स्थिति का सोर्स क्या है. मौजूदा बदलावों में ये शामिल हैं:
FragmentManager
अब अपने सेव किए गए इंस्टेंस की स्थिति को सीधे कस्टमParcelable
में सेव करने के बजाय,Bundle
में सेव करता है.Fragment Result APIs
के ज़रिए सेट किए गए ऐसे नतीजे जिन्हें अब तक डिलीवर नहीं किया गया है उन्हें अबFragmentManager
की इंटरनल स्थिति से अलग सेव किया जाता है.- अब हर फ़्रैगमेंट से जुड़ी स्थिति को
FragmentManager
की इंटरनल स्थिति से अलग सेव किया जाता है. इससे, किसी फ़्रैगमेंट से जुड़ी सेव की गई स्थिति की मात्रा कोFragment
की डीबग लॉगिंग में मौजूद यूनीक आईडी से जोड़ा जा सकता है.
अन्य बदलाव
FragmentStrictMode
अब तीसरे पक्ष के निजी फ़्रैगमेंट को, क्लास के नाम के साथallowViolation()
का इस्तेमाल करके, उल्लंघन से जुड़ी कुछ खास पाबंदियों को बायपास करने की सुविधा देता है.- आपकी गतिविधि के
ActionBar
को मेन्यू उपलब्ध कराने वाले फ़्रैगमेंट एपीआई अब काम नहीं करते. गतिविधि1.4.0
में जोड़े गएMenuHost
औरMenuProvider
एपीआई, टेस्ट की जा सकने वाली, लाइफ़साइकल के बारे में जानकारी देने वाली एपीआई सतह उपलब्ध कराते हैं. फ़्रैगमेंट को इनका इस्तेमाल करना चाहिए.
वर्शन 1.5.0-rc01
11 मई, 2022
androidx.fragment:fragment:1.5.0-rc01
, androidx.fragment:fragment-ktx:1.5.0-rc01
, और androidx.fragment:fragment-testing:1.5.0-rc01
रिलीज़ किए गए हैं. वर्शन 1.5.0-rc01 में ये कमिट शामिल हैं.
सेव किए गए इंस्टेंस की स्थिति को फिर से व्यवस्थित करना
- अब हर फ़्रैगमेंट से जुड़ी स्थिति को
FragmentManager
की इंटरनल स्थिति से अलग सेव किया जाता है. इससे, किसी फ़्रैगमेंट से जुड़ी सेव की गई स्थिति की मात्रा को फ़्रैगमेंट की डीबग लॉगिंग में मौजूद यूनीक आईडी से जोड़ा जा सकता है. (a153e0, b/207158202)
वर्शन 1.5.0-beta01
20 अप्रैल, 2022
androidx.fragment:fragment:1.5.0-beta01
, androidx.fragment:fragment-ktx:1.5.0-beta01
, और androidx.fragment:fragment-testing:1.5.0-beta01
रिलीज़ किए गए हैं. वर्शन 1.5.0-beta01 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
DialogFragment
ने एक नयाdismissNow
तरीका जोड़ा है. यहshowNow
फ़ंक्शन के साथ समानता बनाए रखने के लिएcommitNow
का इस्तेमाल करता है. ध्यान दें कि इससेDialog
तुरंत खारिज नहीं होगा. इससे सिर्फ़Dialog
की स्थिति को सिंक्रोनस तरीके से अपडेट किया जाएगा.FragmentManager
(I15c36, b/72644830)
सेव किए गए इंस्टेंस की स्थिति को फिर से व्यवस्थित करना
FragmentManager
अब अपने सेव किए गए इंस्टेंस की स्थिति को सीधे कस्टमParcelable
में सेव करने के बजाय,Bundle
में सेव करता है. यह इस बारे में ज़्यादा जानकारी देने की दिशा में पहला कदम है कि फ़्रैगमेंट में क्या सेव किया जा रहा है. (I93807, b/207158202)- Fragment Result APIs के ज़रिए सेट किए गए ऐसे नतीजे जिन्हें अब तक डिलीवर नहीं किया गया है उन्हें अब
FragmentManager
की इंटरनल स्थिति से अलग सेव किया जाता है. इससे यह पता चलेगा कि सेव किए गए इंस्टेंस की स्थिति के हिस्से के तौर पर, कौनसे नतीजे सेव किए जा रहे हैं. (I6ea12, b/207158202)
वर्शन 1.5.0-alpha05
6 अप्रैल, 2022
androidx.fragment:fragment:1.5.0-alpha05
, androidx.fragment:fragment-ktx:1.5.0-alpha05
, और androidx.fragment:fragment-testing:1.5.0-alpha05
रिलीज़ किए गए हैं. वर्शन 1.5.0-alpha05 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
Fragment
केsetHasOptionsMenu()
का अब इस्तेमाल नहीं किया जा सकता. Fragment1.5.0-alpha04
रिलीज़ नोट के मुताबिक, मेन्यू और उनके मेन्यू आइटम को मैनेज करने के लिए, नए मेन्यू एपीआई का इस्तेमाल किया जाना चाहिए. (I7b4b4, b/226438239)
वर्शन 1.5.0-alpha04
23 मार्च, 2022
androidx.fragment:fragment:1.5.0-alpha04
, androidx.fragment:fragment-ktx:1.5.0-alpha04
, और androidx.fragment:fragment-testing:1.5.0-alpha04
रिलीज़ किए गए हैं. वर्शन 1.5.0-alpha04 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- आपकी गतिविधि के
ActionBar
को मेन्यू उपलब्ध कराने के लिए, फ़्रैगमेंट एपीआई का इस्तेमाल बंद कर दिया गया है. ऐसा इसलिए, क्योंकि ये एपीआई आपके फ़्रैगमेंट को आपकी गतिविधि से जोड़ते हैं और इन्हें अलग से टेस्ट नहीं किया जा सकता. गतिविधि1.4.0-alpha01
में जोड़े गएMenuHost
औरMenuProvider
एपीआई, टेस्ट की जा सकने वाली, लाइफ़साइकल के बारे में जानकारी देने वाली एपीआई सतह उपलब्ध कराते हैं. फ़्रैगमेंट को इनका इस्तेमाल करना चाहिए. (I50a59, I20758)
गड़बड़ियां ठीक की गईं
SavedStateViewFactory
अबCreationExtras
का इस्तेमाल करने की सुविधा देता है. भले ही, इसेSavedStateRegistryOwner
के साथ शुरू किया गया हो. अगर एक्सट्रा दिए जाते हैं, तो शुरू किए गए आर्ग्युमेंट को अनदेखा कर दिया जाता है. (I6c43b, b/224844583)
वर्शन 1.5.0-alpha03
23 फ़रवरी, 2022
androidx.fragment:fragment:1.5.0-alpha03
, androidx.fragment:fragment-ktx:1.5.0-alpha03
, और androidx.fragment:fragment-testing:1.5.0-alpha03
रिलीज़ किए गए हैं. वर्शन 1.5.0-alpha03 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- अब
by viewModels()
औरby activityViewModels()
फ़ंक्शन मेंCreationExtras
को पास किया जा सकता है. (Ibefe7, b/217601110)
व्यवहार में बदलाव
DialogFragment
अबComponentDialog
का इस्तेमाल,onCreateDialog()
से मिले डिफ़ॉल्ट डायलॉग के तौर पर करता है. (If3784, b/217618170)
वर्शन 1.5.0-alpha02
9 फ़रवरी, 2022
androidx.fragment:fragment:1.5.0-alpha02
, androidx.fragment:fragment-ktx:1.5.0-alpha02
, और androidx.fragment:fragment-testing:1.5.0-alpha02
रिलीज़ किए गए हैं. वर्शन 1.5.0-alpha02 में ये कमिट शामिल हैं.
नई सुविधाएं
FragmentStrictMode
अब तीसरे पक्ष के निजी फ़्रैगमेंट को, क्लास के नाम के साथallowViolation()
का इस्तेमाल करके, उल्लंघन से जुड़ी कुछ खास पाबंदियों को बायपास करने की सुविधा देता है. (I8f678)
वर्शन 1.5.0-alpha01
26 जनवरी, 2022
androidx.fragment:fragment:1.5.0-alpha01
, androidx.fragment:fragment-ktx:1.5.0-alpha01
, और androidx.fragment:fragment-testing:1.5.0-alpha01
रिलीज़ किए गए हैं. वर्शन 1.5.0-alpha01 में ये कमिट शामिल हैं.
नई सुविधाएं
Fragment
को अब ViewModel CreationExtras के साथ इंटिग्रेट किया गया है. इसे Lifecycle2.5.0-alpha01
के हिस्से के तौर पर पेश किया गया था. (I3060b, b/207012585)
गड़बड़ियां ठीक की गईं
- Fragment
1.4.1
से:FragmentContainerView
अब एक्सएमएल से जनरेट किए गए व्यू आईडी की वैल्यू नेगेटिव होने पर, अवैध स्थिति का अपवाद नहीं दिखाता है. (Ic185b, b/213086140) - फ़्रैगमेंट
1.4.1
से:by viewModels()
लेज़ी फ़ंक्शन के साथ कस्टमownerProducer
लैम्डा का इस्तेमाल करने पर, अब यह हमेशा फ़्रैगमेंट के फ़ैक्ट्री का इस्तेमाल करने के बजाय, उस मालिक सेdefaultViewModelProviderFactory
का इस्तेमाल करेगा. ऐसा तब होगा, जब कस्टमViewModelProvider.Factory
उपलब्ध न हो. (I56170, b/214106513) Fragment
केregisterForActivityResult()
कॉलबैक से पहली बारViewModel
को ऐक्सेस करने पर होने वाली क्रैश की समस्या को ठीक किया गया है. (Iea2b3)
वर्शन 1.4
वर्शन 1.4.1
26 जनवरी, 2022
androidx.fragment:fragment:1.4.1
, androidx.fragment:fragment-ktx:1.4.1
, और androidx.fragment:fragment-testing:1.4.1
रिलीज़ किए गए हैं. वर्शन 1.4.1 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
FragmentContainerView
अब एक्सएमएल से जनरेट किए गए व्यू आईडी की वैल्यू नेगेटिव होने पर, अमान्य स्थिति का अपवाद नहीं दिखाता है. (Ic185b, b/213086140)by viewModels()
lazy फ़ंक्शन के साथ कस्टमownerProducer
लैम्डा का इस्तेमाल करते समय, अगर कस्टमViewModelProvider.Factory
नहीं दिया जाता है, तो यह हमेशा फ़्रैगमेंट के फ़ैक्ट्री का इस्तेमाल करने के बजाय, उस मालिक केdefaultViewModelProviderFactory
का इस्तेमाल करेगा. (I56170, b/214106513)
वर्शन 1.4.0
17 नवंबर, 2021
androidx.fragment:fragment:1.4.0
, androidx.fragment:fragment-ktx:1.4.0
, और androidx.fragment:fragment-testing:1.4.0
रिलीज़ किए गए हैं. वर्शन 1.4.0 में ये कमिट शामिल हैं.
1.3.0 के बाद हुए अहम बदलाव
FragmentStrictMode
एपीआई, रनटाइम जांच की सुविधा देते हैं. इससे यह पुष्टि की जा सकती है कि आपका ऐप्लिकेशन या जिन लाइब्रेरी पर आपका ऐप्लिकेशन निर्भर है वे फ़्रैगमेंट के बंद किए गए एपीआई को कॉल नहीं कर रही हैं. उल्लंघन का पता चलने पर, लॉग मैसेज प्रिंट किया जा सकता है, कस्टम लिसनर को ट्रिगर किया जा सकता है या ऐप्लिकेशन को क्रैश किया जा सकता है.FragmentStrictMode.Policy
की मदद से यह कंट्रोल किया जा सकता है कि कौनसी जांचें चालू हैं और कौनसे “जुर्माने” ट्रिगर किए गए हैं. इसेsetStrictModePolicy()
के नए तरीके सेFragmentManager
पर सेट किया जा सकता है. यह नीति उसFragmentManager
पर लागू होती है. साथ ही, यह उन सभी चाइल्ड फ़्रैगमेंट मैनेजर पर भी लागू होती है जो अपनी यूनीक नीति सेट नहीं करते हैं. फ़्रैगमेंट के लिए StrictMode देखें.FragmentContainerView
अबgetFragment()
तरीका उपलब्ध कराता है. यह तरीका, कंटेनर में हाल ही में जोड़े गए फ़्रैगमेंट को दिखाता है. यहfindFragmentById()
केFragmentContainerView
के आईडी के साथ,findFragmentById()
के जैसा ही लॉजिक इस्तेमाल करता है. हालांकि, इससे कॉल को चेन किया जा सकता है.val navController = binding.container.getFragment<NavHostFragment>().navController
FragmentScenario
अबCloseable
लागू करता है. इससे, इसे Kotlin केuse
तरीके या try-with-resources के साथ इस्तेमाल किया जा सकता है.जोड़ा गया
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
यह तय करने के लिए कि फ़्रैगमेंट ट्रांज़िशन में, आपकी थीम से लिए गए स्टैंडर्ड ऐक्टिविटी-ट्रांज़िशन ऐनिमेशन को चालू करना है या नहीं.FragmentManager.enableNewStateManager(boolean)
के एक्सपेरिमेंटल एपीआई को हटा दिया गया है. अब सिर्फ़ नया स्टेट मैनेजर उपलब्ध है.
एक से ज़्यादा बैक स्टैक
FragmentManager
, फ़्रैगमेंट ट्रांज़ैक्शन से बना बैक स्टैक बनाए रखता है. इसमें addToBackStack()
का इस्तेमाल किया जाता है. इससे आपको उन लेन-देन को पॉप करने और पिछली स्थिति पर वापस जाने की सुविधा मिलती है. इसके लिए, फ़्रैगमेंट के साथ स्थिति सेव करना के तरीकों का इस्तेमाल किया जाता है, ताकि आपके फ़्रैगमेंट अपनी स्थिति को सही तरीके से वापस ला सकें.
इस रिलीज़ में, इन तरीकों को और बेहतर बनाया गया है. इसके लिए, तीन नए FragmentManager
एपीआई उपलब्ध कराए गए हैं: saveBackStack(String name)
, restoreBackStack(String name)
, और clearBackStack(String name)
. ये एपीआई, FragmentTransaction
की स्थिति और उन लेन-देन में जोड़े गए हर फ़्रैगमेंट की स्थिति को सेव करने के लिए, addToBackStack()
की तरह ही name
का इस्तेमाल करते हैं. साथ ही, आपको बाद में उन लेन-देन और उनके फ़्रैगमेंट को उनकी स्थिति के साथ वापस लाने की अनुमति देते हैं. इससे, मौजूदा बैक स्टैक को सेव करके और सेव किए गए बैक स्टैक को वापस लाकर, कई बैक स्टैक के बीच आसानी से ‘स्वैप’ किया जा सकता है.
saveBackStack()
, popBackStack()
की तरह ही काम करता है. यह एसिंक्रोनस होता है. साथ ही, इससे उस नाम के सभी फ़्रैगमेंट ट्रांज़ैक्शन वापस आ जाते हैं. साथ ही, जोड़े गए सभी फ़्रैगमेंट मिट जाते हैं और हट जाते हैं. हालांकि, यह कुछ अहम मामलों में अलग होता है:
saveBackStack()
हमेशा शामिल होता है.popBackStack()
, बैक स्टैक में मौजूद सभी लेन-देन को पॉप अप कर देगा. ऐसा तब होगा, जब बैक स्टैक में तय किया गया नाम नहीं मिलता है या कोई शून्य नाम दिया जाता है. हालांकि, अगर आपने पहलेaddToBackStack()
का इस्तेमाल करके, उसी नाम से फ़्रैगमेंट लेन-देन नहीं किया है, तोsaveBackStack()
कुछ नहीं करेगा.- उन लेन-देन से जोड़े गए सभी फ़्रैगमेंट की स्थिति सेव की जाती है. इसका मतलब है कि हर फ़्रैगमेंट का व्यू स्टेट सेव किया जाता है, हर फ़्रैगमेंट का
onSaveInstanceState()
कॉल किया जाता है और उस स्टेट को वापस लाया जाता है. साथ ही, उन फ़्रैगमेंट से जुड़े किसी भीViewModel
इंस्टेंस को बनाए रखा जाता है और उन परonCleared()
को नहीं कॉल किया जाता है.
saveBackStack()
के साथ इस्तेमाल किए जा सकने वाले फ़्रैगमेंट लेन-देन को कुछ शर्तें पूरी करनी होंगी:
- हर फ़्रैगमेंट ट्रांज़ैक्शन में
setReorderingAllowed(true)
का इस्तेमाल किया जाना चाहिए, ताकि यह पक्का किया जा सके कि ट्रांज़ैक्शन को एक ही एटॉमिक ऑपरेशन के तौर पर वापस लाया जा सके. - सेव किए गए लेन-देन का सेट, खुद में पूरा होना चाहिए. इसका मतलब है कि उन्हें लेन-देन के उस सेट से बाहर के किसी भी फ़्रैगमेंट का साफ़ तौर पर रेफ़रंस नहीं देना चाहिए. इससे यह पक्का किया जा सकेगा कि उन्हें बाद में किसी भी समय रीस्टोर किया जा सकता है. भले ही, इस दौरान बैक स्टैक में कोई भी बदलाव किया गया हो.
- सेव किए गए किसी भी फ़्रैगमेंट को बनाए रखा गया फ़्रैगमेंट नहीं होना चाहिए. साथ ही, उसके ट्रांज़िटिव सेट में बनाए रखा गया कोई फ़्रैगमेंट नहीं होना चाहिए. इससे यह पक्का किया जा सकेगा कि बैक स्टैक सेव होने के बाद,
FragmentManager
सेव किए गए फ़्रैगमेंट के कोई भी रेफ़रंस न दिखाए.
saveBackStack()
, restoreBackStack()
, और clearBackStack()
की तरह ही, अगर आपने पहले saveBackStack()
को उसी नाम से कॉल नहीं किया है, तो ये दोनों फ़ंक्शन कुछ नहीं करेंगे. restoreBackStack()
से पहले से सेव किए गए बैक स्टैक को वापस लाया जाता है, जबकि clearBackStack()
से पहले से सेव किए गए बैक स्टैक को मिटाया जाता है.
ज़्यादा जानकारी के लिए, एक से ज़्यादा बैक स्टैक: ज़्यादा जानकारी लेख पढ़ें.
वर्शन 1.4.0-rc01
3 नवंबर, 2021
androidx.fragment:fragment:1.4.0-rc01
Fragment 1.4.0-beta01 में कोई बदलाव नहीं किया गया है. वर्शन 1.4.0-rc01 में ये कमिट शामिल हैं.
वर्शन 1.4.0-beta01
27 अक्टूबर, 2021
androidx.fragment:fragment:1.4.0-beta01
, androidx.fragment:fragment-ktx:1.4.0-beta01
, और androidx.fragment:fragment-testing:1.4.0-beta01
रिलीज़ किए गए हैं. वर्शन 1.4.0-beta01 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- अब पैरंट फ़्रैगमेंट, अपने कॉलबैक को लॉन्च करने से पहले, अपनी पूरी हैरारकी में
onHiddenChanged()
को डिसपैच करेंगे. (Iedc20, b/77504618) - अब खुले हुए कीबोर्ड वाले फ़्रैगमेंट से रीसाइकलर व्यू वाले फ़्रैगमेंट पर जाने पर, कीबोर्ड अपने-आप बंद हो जाएगा. (I8b842, b/196852211)
DialogFragment
अबshow()
,showNow()
याdismiss()
को कॉल करने पर होने वाले सभी लेन-देन के लिएsetReorderingAllowed(true)
का इस्तेमाल करता है. (Ie2c14)DetachAndAttachFragmentInSameFragmentTransaction
की बहुत लंबी लिंट चेतावनी को छोटा करकेDetachAndAttachSameFragment
कर दिया गया है. (e9eca3)
वर्शन 1.4.0-alpha10
29 सितंबर, 2021
androidx.fragment:fragment:1.4.0-alpha10
, androidx.fragment:fragment-ktx:1.4.0-alpha10
, और androidx.fragment:fragment-testing:1.4.0-alpha10
रिलीज़ किए गए हैं. वर्शन 1.4.0-alpha10 में ये कमिट शामिल हैं.
Lint
FragmentTransaction
में मौजूद एक हीFragment
परdetach()
औरattach()
, दोनों को कॉल करने का पता लगाने के लिएDetachAndAttachFragmentInSameFragmentTransaction
लिंट चेतावनी जोड़ी गई है. ऐसा इसलिए, क्योंकि एक ही लेन-देन में ये दोनों कार्रवाइयां एक-दूसरे को रद्द कर देती हैं. इसलिए, इन्हें अलग-अलग लेन-देन में बांटा जाना चाहिए, ताकि ये कार्रवाइयां सही तरीके से हो सकें. (aosp/1832956, b/200867930)MenuHost
केaddMenuProvider
एपीआई का इस्तेमाल करते समय, फ़्रैगमेंट के लाइफ़साइकल के इस्तेमाल को फ़्रैगमेंट व्यू के लाइफ़साइकल में बदलने के लिए,FragmentAddMenuProvider
लिंट की गड़बड़ी जोड़ी गई है. (aosp/1830457, b/200326272)
दस्तावेज़ से जुड़े अपडेट
- Activity Result API के ज़रिए मैनेज किए जाने वाले एपीआई के लिए, बंद होने की सूचना देने वाले मैसेज में ज़्यादा जानकारी जोड़ी गई है. ये एपीआई हैं:
startActivityForResult
,startIntentSenderForResult
,onActivityResult
,requestPermissions
, औरonRequestPermissionsResult
. (cce80f) Fragment
औरDialogFragment
, दोनों के लिएonActivityCreated()
को बंद करने से जुड़ी सूचना में ज़्यादा जानकारी शामिल की गई है. (224db4)
वर्शन 1.4.0-alpha09
15 सितंबर, 2021
androidx.fragment:fragment:1.4.0-alpha09
, androidx.fragment:fragment-ktx:1.4.0-alpha09
, और androidx.fragment:fragment-testing:1.4.0-alpha09
रिलीज़ किए गए हैं. वर्शन 1.4.0-alpha09 में ये कमिट शामिल हैं.
नई सुविधाएं
- अब
clearBackStack(name)
को कॉल करके,saveBackStack(name)
के साथ पहले से सेव की गई किसी भी स्थिति को मिटाया जा सकता है. (I70cd7)
एपीआई में हुए बदलाव
FragmentContainerView
क्लास को Kotlin में फिर से लिखा गया है. इससे यह पक्का किया गया है किgetFragment
फ़ंक्शन, नल वैल्यू को सही तरीके से हैंडल करेगा. (If694a, b/189629145)- FragmentStrictMode को अब Kotlin में लिखा गया है (I11767, b/199183506)
गड़बड़ियां ठीक की गईं
- उस समस्या को ठीक कर दिया गया है जिसकी वजह से,
setReorderingAllowed(true)
की मदद से जोड़े गए फ़्रैगमेंट की स्थिति को ठीक से साफ़ नहीं किया जा सका. ऐसा तब होता था, जब लंबित लेन-देन पूरे होने से पहले ही फ़्रैगमेंट को तुरंत हटा दिया जाता था. (I8ccb8)
वर्शन 1.4.0-alpha08
1 सितंबर, 2021
androidx.fragment:fragment:1.4.0-alpha08
, androidx.fragment:fragment-ktx:1.4.0-alpha08
, और androidx.fragment:fragment-testing:1.4.0-alpha08
रिलीज़ किए गए हैं. वर्शन 1.4.0-alpha08 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
UseRequireInsteadOfGet
लिंट चेक की सुविधा को बेहतर बनाया गया है, ताकि फ़ालतू पैरंटheses को बेहतर तरीके से हैंडल किया जा सके. (I2d865)UseGetLayoutInflater
लिंट चेक को बेहतर बनाया गया है, ताकि ज़्यादा से ज़्यादा मुश्किल मामलों को हैंडल किया जा सके. (Ie5423)
वर्शन 1.4.0-alpha07
18 अगस्त, 2021
androidx.fragment:fragment:1.4.0-alpha07
, androidx.fragment:fragment-ktx:1.4.0-alpha07
, और androidx.fragment:fragment-testing:1.4.0-alpha07
में कोई खास बदलाव नहीं किया गया है. वर्शन 1.4.0-alpha07 में ये कमिट शामिल हैं.
वर्शन 1.4.0-alpha06
4 अगस्त, 2021
androidx.fragment:fragment:1.4.0-alpha06
, androidx.fragment:fragment-ktx:1.4.0-alpha06
, और androidx.fragment:fragment-testing:1.4.0-alpha06
रिलीज़ किए गए हैं. वर्शन 1.4.0-alpha06 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- तेज़ी से बैक स्टैक के बीच स्विच करने पर, कई बैक स्टैक से जुड़ी समस्या को ठीक किया गया है. इससे,
IllegalStateException
को वापस लाते समयIllegalStateException
दिखता था या फ़्रैगमेंट की दूसरी कॉपी दिखती थी.FragmentTransaction
(I9039f) FragmentManager
के ज़रिए पहले सेव की गई स्थिति की कॉपी कोsaveBackStack()
के ज़रिए स्थिति को वापस लाने के बाद भी बनाए रखने की समस्या को ठीक किया गया है. (Ied212)show(FragmentTransaction, String)
तरीके से DialogFragment को जोड़ने के दौरान, स्थिति सेव होने के बादdismissAllowingStateLoss()
तरीके को कॉल करने पर, अबdismissAllowingStateLoss()
क्रैश नहीं होता.DialogFragment
(I84422)
वर्शन 1.4.0-alpha05
21 जुलाई, 2021
androidx.fragment:fragment:1.4.0-alpha05
, androidx.fragment:fragment-ktx:1.4.0-alpha05
, और androidx.fragment:fragment-testing:1.4.0-alpha05
रिलीज़ किए गए हैं. वर्शन 1.4.0-alpha05 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- फ़्रैगमेंट
1.3.6
से: रूट व्यू मेंtransitionGroup=”true”
सेट होने पर,hide()
का इस्तेमाल करते समय फ़्रैगमेंट का व्यू अबGONE
पर सेट हो गया है. (aosp/1766655, b/193603427) - फ़्रैगमेंट
1.3.6
से:FragmentActivity
अब हमेशा सेव की गई स्थिति को अनलॉक करता है. ऐसा इसलिए, क्योंकि यह लाइफ़साइकल के कॉल बैक में पहला ऑपरेशन होता है. यह कॉल बैक, फ़्रैगमेंट के कॉल बैक को बदल देता है. (I6db7a)
डिपेंडेंसी अपडेट
- फ़्रैगमेंट
1.3.6
से: फ़्रैगमेंट अब ऐक्टिविटी1.2.4
पर निर्भर करते हैं (I3a66c)
वर्शन 1.4.0-alpha04
30 जून, 2021
androidx.fragment:fragment:1.4.0-alpha04
, androidx.fragment:fragment-ktx:1.4.0-alpha04
, और androidx.fragment:fragment-testing:1.4.0-alpha04
रिलीज़ किए गए हैं. वर्शन 1.4.0-alpha04 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
FragmentManager
अब अपनी स्थिति को सेव करने के लिए,SavedStateRegistry
का इस्तेमाल करता है.FragmentController
मेंsaveAllState()
औरrestoreSavedState()
तरीकों को भी बंद कर दिया गया है. अगर आपकोFragmentActivity
के बाहर फ़्रैगमेंट होस्ट करने के लिएFragmentController
का इस्तेमाल करना है, तो आपकोFragmentHostCallbacks
मेंSavedStateRegistryOwner
लागू करना होगा. (Iba68e, b/188734238)
गड़बड़ियां ठीक की गईं
- एक ऐसी समस्या को ठीक किया गया है जिसमें कई बैक स्टैक के साथ काम करने के लिए,
saveBackStack()
को कॉल करने पर गड़बड़ी होती थी. ऐसा तब होता था, जबreplace()
का इस्तेमाल करने वालेFragmentTransaction
को एक ही समय पर चलाया जाता था. (I73137) - हमने एक
NullPointerException
ठीक किया है. यह तब होता था, जबrestoreBackStack()
एपीआई का इस्तेमाल करके, एक से ज़्यादा बैक स्टैक के लिए सहायता पाने के दौरान, सेव किए गए बैक स्टैक को मैन्युअल तरीके से वापस लाया जाता था. इस बैक स्टैक में कई लेन-देन शामिल होते थे. इस अपडेट से एक समस्या भी ठीक हुई है. इस समस्या की वजह से, सभी लेन-देन के लिएsetReorderingAllowed(true)
की जांच नहीं हो रही थी. (I8c593) - उस समस्या को ठीक किया गया है जिसमें
FragmentManager
, फ़्रैगमेंट के पहले से सेव किए गए स्टेटस को गलत तरीके से वापस लाता रहता था. ऐसा तब होता था, जब उन फ़्रैगमेंट कोFragmentManager
से हटा दिया जाता था. इस वजह से, सेव किया गया स्टेटस समय के साथ बढ़ता रहता था. (I1fb8e)
वर्शन 1.4.0-alpha03
16 जून, 2021
androidx.fragment:fragment:1.4.0-alpha03
, androidx.fragment:fragment-ktx:1.4.0-alpha03
, और androidx.fragment:fragment-testing:1.4.0-alpha03
रिलीज़ किए गए हैं. वर्शन 1.4.0-alpha03 में ये कमिट शामिल हैं.
नई सुविधाएं
- सभी Fragment StrictMode
Violation
क्लास को अपडेट कर दिया गया है. इनमें गड़बड़ी के बारे में ज़्यादा जानकारी देने वाले मैसेज शामिल हैं. इनसे उल्लंघन के बारे में ज़्यादा जानकारी मिलती है. (b/187871638)FragmentTagUsageViolation
में अब गड़बड़ी के बारे में ज़्यादा जानकारी देने वाला मैसेज शामिल है. इसमें उस पैरंट कंटेनर की जानकारी भी शामिल है जिसमें फ़्रैगमेंट को जोड़ा जाना था. (Ic33a7)WrongFragmentContainerViolation
में अब गड़बड़ी की ज़्यादा जानकारी वाला मैसेज दिखता है. इसमें उस कंटेनर की जानकारी भी शामिल होती है जिसमें फ़्रैगमेंट जोड़ा जा रहा था. (Ib55f8)TargetFragmentUsageViolation
के इस्तेमाल के उदाहरणों के लिए, अब गड़बड़ी के बारे में ज़्यादा जानकारी देने वाले मैसेज उपलब्ध हैं. इनमें उल्लंघन करने वाले फ़्रैगमेंट और उससे जुड़ी अन्य जानकारी शामिल होती है. (Icc6ac)RetainInstanceUsageViolation
को बढ़ाने वाली क्लास के लिए, अब गड़बड़ी की ज़्यादा जानकारी वाले मैसेज उपलब्ध हैं. इनमें उल्लंघन करने वाला फ़्रैगमेंट भी शामिल है. (I6bd55)FragmentReuseViolation
में अब गड़बड़ी के बारे में ज़्यादा जानकारी देने वाला मैसेज दिखता है. इसमें फ़्रैगमेंट का पिछला आईडी भी शामिल होता है. (I28ce2)SetUserVisibleHintViolation
में अब गड़बड़ी के बारे में ज़्यादा जानकारी देने वाला मैसेज दिखता है. इसमें यह भी बताया जाता है कि उपयोगकर्ता को दिखने वाला हिंट किस पर सेट किया जा रहा था. (Ib2d5f)
व्यवहार में बदलाव
FragmentContainerView
परfitsSystemWindows
को कॉल करने से जुड़ी पाबंदी हटा दी गई है. अब इससे आपका ऐप्लिकेशन क्रैश नहीं होगा. (6b8ddd, b/190622202)
गड़बड़ियां ठीक की गईं
- फ़्रैगमेंट
1.3.5
से: aosp/1679887 में, फ़्रैगमेंट1.3.4
के ज़रिए शेयर किए गए एलिमेंट के ट्रांज़िशन में हुई रिग्रेशन की समस्या को ठीक किया गया. अब फ़्रैगमेंट, ट्रांज़िशन ग्रुप को सही तरीके से हैंडल करते हैं. इन्हें सीधे तौर परtransitionGroup="true"
के ज़रिए या किसीtransitionName
याbackground
के ज़रिए सेट किया जाता है. साथ ही, शेयर किए गए एलिमेंट अबIndexOutOfBoundsException
नहीं दिखाएंगे. (I16484, b/188679569, b/188969304) - किसी फ़्रैगमेंट को हटाने या छिपाने की कोशिश करने पर,
FragmentManager
अब क्रैश नहीं होगा. (I573dd, b/183634730) - टॉप लेवल के वैरिएबल का आकलन करते समय,
OnCreateDialogIncorrectCallback
लिंट चेक अब क्रैश नहीं होगा. (0a9efa, b/189967522)
वर्शन 1.4.0-alpha02
2 जून, 2021
androidx.fragment:fragment:1.4.0-alpha02
, androidx.fragment:fragment-ktx:1.4.0-alpha02
, और androidx.fragment:fragment-testing:1.4.0-alpha02
रिलीज़ किए गए हैं. वर्शन 1.4.0-alpha02 में ये कमिट शामिल हैं.
नई सुविधाएं
FragmentStrictMode
अब हमेशा उल्लंघनों को लॉग करेगा. ऐसा तब होगा, जबFragmentManager
के ज़रिए लॉगिंग की सुविधा चालू की गई हो. भले ही, पाबंदी वाले मोड की मौजूदा नीति का इस्तेमाल किया जा रहा हो. (I02df6, b/187872638)FragmentStrictMode
अब कुछFragment
क्लास को स्ट्रिक्ट मोडViolation
से बाहर रखने की सुविधा देता है. इससे उस क्लास को किसी भी तरह के जुर्माने से छूट मिल जाती है. (Ib4e5d, b/184786736)FragmentStrictMode
Violation
क्लास को बड़ा कर दिया गया है, ताकि हर उल्लंघन के आधार पर स्ट्रक्चर की जानकारी जोड़ी जा सके. इससे आपको यह पुष्टि करने में मदद मिलती है कि किस वजह से उल्लंघन हुआ है. साथ ही, उल्लंघन करने वाले फ़्रैगमेंट (If5118, b/187871150) के बारे में भी पता चलता है. हरViolation
में यह जानकारी शामिल होती है:WrongFragmentContainerViolation
में अब वहViewGroup
शामिल है जिसेFragment
में जोड़ने की कोशिश की जा रही थी. (I83c75, b/187871150)TargetFragmentUsageViolation
कोSetTargetFragmentUsageViolation
,GetTargetFragmentUsageViolation
, औरGetTargetFragmentRequestCodeUsageViolation
में बांटा गया है.SetTargetFragmentUsageViolation
में टारगेट फ़्रैगमेंट और अनुरोध कोड शामिल है. (I741b4, b/187871150)SetUserVisibleHintViolation
में अबsetUserVisibleHint()
में पास की गई बूलियन वैल्यू शामिल है. (I00585, b/187871150)FragmentTagUsageViolation
में अब वह ViewGroup शामिल है जिसमें<fragment>
टैग, फ़्रैगमेंट को बड़ा करने की कोशिश कर रहा था.(I5dbbc, b/187871150)FragmentReuseViolation
में अबFragment
के पिछले इंस्टेंस का यूनीक आईडी शामिल है. इसी इंस्टेंस की वजह से उल्लंघन हुआ था. (I0544d, b/187871150)RetainInstanceUsageViolation
अब ऐब्स्ट्रैक्ट है और इसकी दो सबक्लास हैं:SetRetainInstanceUsageViolation
औरGetRetainInstanceUsageViolation
. ये दोनों, उल्लंघन के टाइप के दो मामलों को दिखाती हैं. (Ic81e5, b/187871150)
व्यवहार में बदलाव
FragmentContainerView
अबfitsSystemWindow
एट्रिब्यूट को प्रोग्राम के हिसाब से या एक्सएमएल के ज़रिए बदलने की कोशिश करने पर, अपवाद दिखाता है. हर फ़्रैगमेंट के व्यू को इनसेट मैनेज करने चाहिए. (Ie6651, b/187304502)
वर्शन 1.4.0-alpha01
18 मई, 2021
androidx.fragment:fragment:1.4.0-alpha01
, androidx.fragment:fragment-ktx:1.4.0-alpha01
, और androidx.fragment:fragment-testing:1.4.0-alpha01
रिलीज़ किए गए हैं. वर्शन 1.4.0-alpha01 में ये कमिट शामिल हैं.
नई सुविधाएं
FragmentContainerView
अबgetFragment()
तरीका उपलब्ध कराता है. यह तरीका, कंटेनर में हाल ही में जोड़े गए फ़्रैगमेंट को दिखाता है. यहfindFragmentById()
केFragmentContainerView
के आईडी के साथ,findFragmentById()
के जैसा ही लॉजिक इस्तेमाल करता है. हालांकि, इससे कॉल को चेन किया जा सकता है. (Ife17a, b/162527857)val navController = binding.container.getFragment<NavHostFragment>().navController
जोड़ा गया
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
यह तय करने के लिए कि फ़्रैगमेंट ट्रांज़िशन में, आपकी थीम से लिए गए स्टैंडर्ड ऐक्टिविटी-ट्रांज़िशन ऐनिमेशन को चालू करना है या नहीं. (I46652)
एक से ज़्यादा बैक स्टैक
FragmentManager
, फ़्रैगमेंट ट्रांज़ैक्शन से बना बैक स्टैक बनाए रखता है. इसमें addToBackStack()
का इस्तेमाल किया जाता है. इससे आपको उन लेन-देन को पॉप करने और पिछली स्थिति पर वापस जाने की सुविधा मिलती है. इसके लिए, फ़्रैगमेंट के साथ स्थिति सेव करना के तरीकों का इस्तेमाल किया जाता है, ताकि आपके फ़्रैगमेंट अपनी स्थिति को सही तरीके से वापस ला सकें.
इस रिलीज़ में, इन तरीकों को बेहतर बनाया गया है. इसके लिए, दो नए FragmentManager
एपीआई उपलब्ध कराए गए हैं: saveBackStack(String name)
और restoreBackStack(String name)
. ये एपीआई, FragmentTransaction
की स्थिति और उन लेन-देन में जोड़े गए हर फ़्रैगमेंट की स्थिति को सेव करने के लिए, addToBackStack()
की तरह ही name
का इस्तेमाल करते हैं. साथ ही, आपको बाद में उन लेन-देन और उनके फ़्रैगमेंट को उनकी स्थिति के साथ वापस लाने की अनुमति देते हैं. इससे, मौजूदा बैक स्टैक को सेव करके और सेव किए गए बैक स्टैक को वापस लाकर, कई बैक स्टैक के बीच आसानी से ‘स्वैप’ किया जा सकता है.
saveBackStack()
, popBackStack()
की तरह ही काम करता है. यह एसिंक्रोनस होता है. साथ ही, इससे उस नाम के सभी फ़्रैगमेंट ट्रांज़ैक्शन वापस आ जाते हैं. साथ ही, जोड़े गए सभी फ़्रैगमेंट मिट जाते हैं और हट जाते हैं. हालांकि, यह कुछ अहम मामलों में अलग होता है:
saveBackStack()
हमेशा शामिल होता है.popBackStack()
, बैक स्टैक में मौजूद सभी लेन-देन को पॉप अप कर देगा. ऐसा तब होगा, जब बैक स्टैक में तय किया गया नाम नहीं मिलता है या कोई शून्य नाम दिया जाता है. हालांकि, अगर आपने पहलेaddToBackStack()
का इस्तेमाल करके, उसी नाम से फ़्रैगमेंट लेन-देन नहीं किया है, तोsaveBackStack()
कुछ नहीं करेगा.- उन लेन-देन से जोड़े गए सभी फ़्रैगमेंट की स्थिति सेव की जाती है. इसका मतलब है कि हर फ़्रैगमेंट का व्यू स्टेट सेव किया जाता है, हर फ़्रैगमेंट का
onSaveInstanceState()
कॉल किया जाता है और उस स्टेट को वापस लाया जाता है. साथ ही, उन फ़्रैगमेंट से जुड़े किसी भीViewModel
इंस्टेंस को बनाए रखा जाता है और उन परonCleared()
को नहीं कॉल किया जाता है.
saveBackStack()
के साथ इस्तेमाल किए जा सकने वाले फ़्रैगमेंट लेन-देन को कुछ शर्तें पूरी करनी होंगी:
- हर फ़्रैगमेंट ट्रांज़ैक्शन में
setReorderingAllowed(true)
का इस्तेमाल किया जाना चाहिए, ताकि यह पक्का किया जा सके कि ट्रांज़ैक्शन को एक ही एटॉमिक ऑपरेशन के तौर पर वापस लाया जा सके. - सेव किए गए लेन-देन का सेट, खुद में पूरा होना चाहिए. इसका मतलब है कि उन्हें लेन-देन के उस सेट से बाहर के किसी भी फ़्रैगमेंट का साफ़ तौर पर रेफ़रंस नहीं देना चाहिए. इससे यह पक्का किया जा सकेगा कि उन्हें बाद में किसी भी समय रीस्टोर किया जा सकता है. भले ही, इस दौरान बैक स्टैक में कोई भी बदलाव किया गया हो.
- सेव किए गए किसी भी फ़्रैगमेंट को बनाए रखा गया फ़्रैगमेंट नहीं होना चाहिए. साथ ही, उसके ट्रांज़िटिव सेट में बनाए रखा गया कोई फ़्रैगमेंट नहीं होना चाहिए. इससे यह पक्का किया जा सकेगा कि बैक स्टैक सेव होने के बाद,
FragmentManager
सेव किए गए फ़्रैगमेंट के कोई भी रेफ़रंस न दिखाए.
saveBackStack()
की तरह ही, अगर आपने पहले saveBackStack()
को उसी नाम से कॉल नहीं किया है, तो restoreBackStack()
कुछ नहीं करता. (b/80029773)
Fragment StrictMode
FragmentStrictMode
एपीआई, रनटाइम जांच की सुविधा देते हैं. इससे यह पुष्टि की जा सकती है कि आपका ऐप्लिकेशन या जिन लाइब्रेरी पर आपका ऐप्लिकेशन निर्भर है वे फ़्रैगमेंट के बंद किए गए एपीआई को कॉल नहीं कर रही हैं. उल्लंघन का पता चलने पर, लॉग मैसेज प्रिंट किया जा सकता है, कस्टम लिसनर को ट्रिगर किया जा सकता है या ऐप्लिकेशन को क्रैश किया जा सकता है. FragmentStrictMode.Policy
की मदद से यह कंट्रोल किया जा सकता है कि कौनसी जांचें चालू हैं और कौनसे “जुर्माने” ट्रिगर किए गए हैं. इसे setStrictModePolicy()
के नए तरीके से FragmentManager
पर सेट किया जा सकता है. यह नीति उस FragmentManager
पर लागू होती है. साथ ही, यह उन सभी चाइल्ड फ़्रैगमेंट मैनेजर पर भी लागू होती है जो अपनी यूनीक नीति सेट नहीं करते हैं. (#123, #131, #150, b/143774122)
detectFragmentReuse()
यह पता लगाता है कि पहले हटाए गएFragment
इंस्टेंस कोFragmentManager
में फिर से जोड़ा जा रहा है या नहीं.Fragment
के इंस्टेंस को डिस्ट्रॉय करने औरFragmentManager
से हटाने के बाद, आपको उससे इंटरैक्ट नहीं करना चाहिए या उसका रेफ़रंस नहीं रखना चाहिए. (#142, b/153738653)detectFragmentTagUsage()
यह पता लगाता है कि लेआउट एक्सएमएल में<fragment>
टैग का इस्तेमाल कब किया जा रहा है. लेआउट के हिस्से के तौर पर फ़्रैगमेंट को बड़ा करते समय, आपको हमेशाFragmentContainerView
का इस्तेमाल करना चाहिए. (#141, b/153738235)detectWrongFragmentContainer()
यह पता लगाता है कि आपने किसी ऐसे कंटेनर में फ़्रैगमेंट जोड़ा है जोFragmentContainerView
नहीं है. आपको हमेशा अपने लेआउट में फ़्रैगमेंट के कंटेनर के तौर परFragmentContainerView
का इस्तेमाल करना चाहिए. (#146, b/181137036)detectRetainInstanceUsage()
से यह पता चलता है कि आपने काम न करने वालेsetRetainInstance()
याgetRetainInstance()
एपीआई का इस्तेमाल किया है. (#140, b/153737954)detectSetUserVisibleHint()
इस कुकी से यह पता चलता है कि आपने बंद किए जा चुकेsetUserVisibleHint()
एपीआई का इस्तेमाल किया है. (#136, b/153738974)detectTargetFragmentUsage()
,getTargetFragment()
याgetTargetRequestCode()
एपीआई का इस्तेमाल करने पर, यहdetectTargetFragmentUsage()
कुकी इसका पता लगाती है.setTargetFragment()
(#139, b/153737745)
एपीआई में हुए बदलाव
FragmentManager.enableNewStateManager(boolean)
के एक्सपेरिमेंटल एपीआई को हटा दिया गया है. अब सिर्फ़ नया स्टेट मैनेजर उपलब्ध है. (I90036, b/162776418)FragmentScenario
अबCloseable
लागू करता है. इससे, इसे Kotlin केuse
तरीके या try-with-resources के साथ इस्तेमाल किया जा सकता है. (#121, b/143774122)
लिंट की नई जांचें
UseGetLayoutInflater
लिंट चेक की सुविधा अबDialogFragment
मेंLayoutInflater.from(Context)
का इस्तेमाल करने पर चेतावनी देती है. आपकोLayoutInflater
के लिए सहीgetLayoutInflater()
पाने के लिए, हमेशा डायलॉग फ़्रैगमेंट केgetLayoutInflater()
तरीके का इस्तेमाल करना चाहिए. (#156, b/170781346)DialogFragmentCallbacksDetector
लिंट चेक अबDialogFragment
केonCreateDialog()
तरीके मेंsetOnCancelListener
याsetOnDismissListener
को कॉल करने पर चेतावनी देता है. इन लिसनर का मालिकाना हकDialogFragment
के पास होता है. इसलिए, आपको इन कॉलबैक को पाने के लिएonCancel()
औरonDismiss()
को बदलना चाहिए. (#171, b/181780047, b/187524311)
गड़बड़ियां ठीक की गईं
- Fragment 1.3.4: Fragment
1.3.3
में हुई रिग्रेशन की समस्या को ठीक किया गया है. यह समस्या, Fragment मेंViewModelProvider
या Jetpack Compose केviewModel()
तरीके के साथViewTreeViewModelStoreOwner.get()
API का इस्तेमाल करते समय हुई थी. इस्तेमाल के इन उदाहरणों में अब आपके फ़्रैगमेंट से मिलेViewModelProvider.Factory
का सही तरीके से इस्तेमाल किया जाता है. ऐसा तब होता है, जब यहgetDefaultViewModelProviderFactory()
को बदल देता है. जैसे,@AndroidEntryPoint
एनोटेट किए गए फ़्रैगमेंट, Hilt का इस्तेमाल करते समय ऐसा करते हैं. अगर आपने उस तरीके को नहीं बदला है, तोSavedStateViewModelFactory
बनाया जाता है. यह फ़्रैगमेंट के व्यू के साथ-साथ, अपनी स्थिति को सेव और रीस्टोर करता है. इसे डिफ़ॉल्ट फ़ैक्ट्री के तौर पर बनाया जाता है. (I5cbfa, b/186097368) - Fragment 1.3.4 से: API 29 पर
FragmentContainerView
का इस्तेमाल करने पर, इंसर्ट अब हमेशा के लिए डिसपैच नहीं होंगे. इससेBottomNavigationBar
औरFloatingActionButton
इंस्टेंस से जुड़ी समस्याएं ठीक हो जाएंगी. (I1bb78, b/186012452) - Fragment 1.3.4 से: अब प्रोसेस बंद होने के बाद, फ़्रैगमेंट के नतीजे वाले बंडल से Parcelable को वापस पाया जा सकता है. (I65932, b/187443158)
- Fragment 1.3.4 से: ViewGroup पर शेयर किए गए एलिमेंट का ट्रांज़िशन करते समय, अगर ViewGroup के लिए
transitionGroup
को false पर सेट किया गया है, तो अब यह सही तरीके से ट्रांज़िशन करेगा. (I99675)
बाहरी योगदान
FragmentScenario
कोCloseable
लागू करने में मदद करने के लिए, simonschiller को धन्यवाद. (#121, b/143774122)- इस रिलीज़ के लिए, पूरा
FragmentStrictMode
एपीआई जोड़ने के लिए धन्यवाद simonschiller! (#123, #131, #150, b/143774122, #142, b/153738653, #141, b/153738235, #146, b/181137036, #140, b/153737954, #136, b/153738974, #139, b/153737745) UseGetLayoutInflater
Lint check जोड़ने के लिए, tatocaster का धन्यवाद. (#156, b/170781346)DialogFragmentCallbacksDetector
Lint check जोड़ने के लिए, tatocaster का धन्यवाद. (#171, b/181780047)
वर्शन 1.3
वर्शन 1.3.6
21 जुलाई, 2021
androidx.fragment:fragment:1.3.6
, androidx.fragment:fragment-ktx:1.3.6
, और androidx.fragment:fragment-testing:1.3.6
रिलीज़ किए गए हैं. वर्शन 1.3.6 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- फ़्रैगमेंट
1.4.0-alpha03
से: किसी फ़्रैगमेंट को हटाने के दौरान उसे छिपाने की कोशिश करने पर,FragmentManager
अब क्रैश नहीं होगा. (I573dd, b/183634730) - अब फ़्रैगमेंट का व्यू,
transitionGroup=”true”
सेट होने परhide()
का इस्तेमाल करते समय,GONE
पर सही तरीके से सेट हो जाता है. (aosp/1766655, b/193603427) FragmentActivity
अब लाइफ़साइकल के कॉल बैक में, सेव की गई स्थिति को हमेशा अनलॉक करता है. (I6db7a)
डिपेंडेंसी अपडेट
- फ़्रैगमेंट
1.3.6
से: फ़्रैगमेंट अब ऐक्टिविटी1.2.4
पर निर्भर करते हैं (I3a66c)
वर्शन 1.3.5
16 जून, 2021
androidx.fragment:fragment:1.3.5
, androidx.fragment:fragment-ktx:1.3.5
, और androidx.fragment:fragment-testing:1.3.5
रिलीज़ किए गए हैं. वर्शन 1.3.5 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- aosp/1679887 ने Fragment
1.3.4
में शेयर किए गए एलिमेंट के ट्रांज़िशन से जुड़ी समस्या को ठीक किया है. अब फ़्रैगमेंट, ट्रांज़िशन ग्रुप को सही तरीके से हैंडल करते हैं. इन्हें सीधे तौर परtransitionGroup="true"
के ज़रिए या किसीtransitionName
याbackground
के ज़रिए सेट किया जाता है. साथ ही, शेयर किए गए एलिमेंट अबIndexOutOfBoundsException
नहीं दिखाएंगे. (I16484, b/188679569, b/188969304)
वर्शन 1.3.4
18 मई, 2021
androidx.fragment:fragment:1.3.4
, androidx.fragment:fragment-ktx:1.3.4
, और androidx.fragment:fragment-testing:1.3.4
रिलीज़ किए गए हैं. वर्शन 1.3.4 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- Hilt का इस्तेमाल करते समय,
ViewModelProvider
या Fragment मेंviewModel()
की Jetpack Compose विधि के साथViewTreeViewModelStoreOwner.get()
API का इस्तेमाल करने पर, Fragment1.3.3
में हुई रिग्रेशन की समस्या को ठीक किया गया. इन इस्तेमाल के उदाहरणों में अब आपके फ़्रैगमेंट से मिलेViewModelProvider.Factory
का सही तरीके से इस्तेमाल किया जाता है. ऐसा तब होता है, जब यहgetDefaultViewModelProviderFactory()
को बदल देता है. जैसे,@AndroidEntryPoint
एनोटेट किए गए फ़्रैगमेंट करते हैं. अगर आपने उस तरीके को नहीं बदला है, तोSavedStateViewModelFactory
बनाया जाता है. यह फ़्रैगमेंट के व्यू के साथ-साथ, अपनी स्थिति को सेव और रीस्टोर करता है. इसे डिफ़ॉल्ट फ़ैक्ट्री के तौर पर बनाया जाता है. (I5cbfa, b/186097368) - एपीआई 29 पर
FragmentContainerView
का इस्तेमाल करने पर, इंसर्ट अब हमेशा के लिए डिसपैच नहीं होंगे. इससेBottomNavigationBar
औरFloatingActionButton
इंस्टेंस से जुड़ी समस्याएं ठीक हो जाएंगी. (I1bb78, b/186012452) - अब प्रोसेस बंद होने के बाद, फ़्रैगमेंट के नतीजे वाले बंडल से अपने पार्सलेबल को वापस पाया जा सकता है. (I65932, b/187443158)
- ViewGroup पर शेयर किए गए एलिमेंट का ट्रांज़िशन करते समय, अगर ViewGroup के लिए
transitionGroup
को false पर सेट किया गया है, तो अब यह सही तरीके से ट्रांज़िशन करेगा. (I99675)
वर्शन 1.3.3
21 अप्रैल, 2021
androidx.fragment:fragment:1.3.3
, androidx.fragment:fragment-ktx:1.3.3
, और androidx.fragment:fragment-testing:1.3.3
रिलीज़ किए गए हैं. वर्शन 1.3.3 में ये कमिट शामिल हैं.
नई सुविधाएं
SavedStateViewModelFactory
का इस्तेमाल अब तब काम करता है, जब इसे Fragment के View के साथViewTreeSavedStateRegistryOwner.get()
का इस्तेमाल करके दिखाए गएSavedStateRegistryOwner
के साथ इस्तेमाल किया जाता है. (I21acf, b/181577191)
गड़बड़ियां ठीक की गईं
- Fragment
1.3.2
में हुई रिग्रेशन की समस्या को ठीक किया गया है. इस समस्या की वजह से,setPrimaryNavFragment
ऑपरेशन शामिल करने वालेFragmentTransaction
को पॉप अप करने पर,popEnter
ऐनिमेशन नहीं चलते थे. जैसे,NavHostFragment
में इस्तेमाल किए जाने वाले ऐनिमेशन. (I38c87, b/183877426) FragmentContainerView
अब यह पक्का करता है कि हरFragment
कोWindowInsets
का नया सेट भेजा जाए. इससे यह पक्का होता है कि हर फ़्रैगमेंट अब इनसेट का इस्तेमाल अलग से कर सकता है. (I63f68, b/172153900)DialogFragment
अब उन मामलों को ठीक से हैंडल करता है जहां किसी कंटेनर में चाइल्ड फ़्रैगमेंट जोड़ा जाता है. इस कंटेनर का आईडी, आपकी कस्टमDialog
क्लास के कंटेनर के आईडी के जैसा होता है. इससे, उन आईडी को फिर से इस्तेमाल करते समय व्यू हैरारकी से जुड़ी समस्याएं ठीक हो जाती हैं जिनका इस्तेमालBottomSheetDialog
जैसे डायलॉग बॉक्स में किया जाता है. (Ie6279, b/180021387)FragmentManager.dump()
अब ऐक्टिव फ़्रैगमेंट की सूची में मौजूद पहले फ़्रैगमेंट को सही तरीके से इंडेंट करता है. (If5c33, b/183705451)
स्टेट मैनेजर की नई सुविधा से जुड़ी गड़बड़ियां ठीक की गईं
- नया फ़्रैगमेंट स्टेट मैनेजर, अब छिपाने की कार्रवाइयों के साथ-साथ एग्ज़िट ट्रांज़िशन को भी सही तरीके से हैंडल करता है. (I9e4de, b/184830265)
वर्शन 1.3.2
24 मार्च, 2021
androidx.fragment:fragment:1.3.2
, androidx.fragment:fragment-ktx:1.3.2
, और androidx.fragment:fragment-testing:1.3.2
रिलीज़ किए गए हैं. वर्शन 1.3.2 में ये कमिट शामिल हैं.
स्टेट मैनेजर की नई सुविधा से जुड़ी गड़बड़ियां ठीक की गईं
popBackStack()
औरcommit()
, दोनों कार्रवाइयों को एक साथ चलाने पर, आखिरी कार्रवाई अब सभी ऐनिमेशन के लिए दिशा सेट करेगी. ऐसा इसलिए, ताकि कुछ पॉप ऐनिमेशन और कुछ एंटर ऐनिमेशन चलाने के बजाय, सभी ऐनिमेशन के लिए दिशा सेट की जा सके. (I7072e, b/181142246)- शेयर किए गए एलिमेंट हैरारकी में मौजूद व्यू के ट्रांज़िशन का नाम अब तब तक नहीं मिटेगा, जब तक शेयर किए गए एलिमेंट का ट्रांज़िशन पूरा नहीं हो जाता. (I4d4a6, b/179934757)
डिपेंडेंसी से जुड़े अपडेट
- अब फ़्रैगमेंट, ऐक्टिविटी 1.2.2 पर निर्भर करता है. इससे, Fragment 1.3.1 या इसके बाद के वर्शन का इस्तेमाल करते समय, ऐक्टिविटी के
InvalidFragmentVersionForActivityResult
लिंट चेक से जुड़ी समस्या ठीक हो जाती है. - Fragment अब Lifecycle 2.3.1 पर निर्भर करता है.
वर्शन 1.3.1
10 मार्च, 2021
androidx.fragment:fragment:1.3.1
, androidx.fragment:fragment-ktx:1.3.1
, और androidx.fragment:fragment-testing:1.3.1
रिलीज़ किए गए हैं. वर्शन 1.3.1 में ये कमिट शामिल हैं.
नई सुविधाएं
- अब
DialogFragment
में मौजूद डायलॉग, अपने DecorView के ज़रिए ViewTree के मालिकों को ऐक्सेस कर सकते हैं. इससे यह पक्का किया जा सकेगा किDialogFragment
का इस्तेमालComposeView
के साथ किया जा सकता है. (Ib9290, b/180691023)
गड़बड़ियां ठीक की गईं
- FragmentContainerView का इस्तेमाल करके, पहले से मौजूद
RESUMED
गतिविधि में जोड़े गए फ़्रैगमेंट अब कॉन्फ़िगरेशन में बदलाव होने के बाद सही तरीके से दिखते हैं. (Ie14c8, b/180538371) - फ़्रैगमेंट के आखिर में अब कोई अतिरिक्त
}
नहीं हैtoString()
(I54705, b/177761088) - FragmentActivity में ओवरराइड किए गए तरीके, अब बेस मेथड javaDoc को सही तरीके से इनहेरिट करते हैं (I736ce, b/139548782)
setFragmentResult
औरsetFragmentResultListener
के दस्तावेज़ों में, पैरामीटर के दस्तावेज़ अपडेट किए गए हैं. इससे पता चलता है कि अब वे नल वैल्यू स्वीकार नहीं करते हैं (I990ba, b/178348386)
स्टेट मैनेजर की नई सुविधा से जुड़ी गड़बड़ियां ठीक की गईं
mFocusedView
(Ib4e9e, b/179925887) की वजह से फ़्रैगमेंट में मेमोरी लीक होने की समस्या को ठीक किया गया है- अब फ़्रैगमेंट, लेन-देन दिखाने/छिपाने (I8bce8, b/180255554) के लिए
onCreateOptionsMenu
को सही तरीके से कॉल करते हैं - अब लेआउट से पहले शुरू होने वाले ट्रांज़िशन वाले चाइल्ड फ़्रैगमेंट, सही तरीके से
RESUMED
तक पहुंचेंगे (Ic11e6, b/180825150) <fragment>
टैग का इस्तेमाल करके बढ़ाए गए फ़्रैगमेंट अब हमेशाRESUMED
तक पहुंचेंगे (I452ac, (I9fa49)
डिपेंडेंसी से जुड़े अपडेट
- Fragment 1.3.1, Activity
1.2.1
पर निर्भर करता है. (I557b9)
वर्शन 1.3.0
10 फ़रवरी, 2021
androidx.fragment:fragment:1.3.0
, androidx.fragment:fragment-ktx:1.3.0
, और androidx.fragment:fragment-testing:1.3.0
रिलीज़ किए गए हैं. वर्शन 1.3.0 में ये कमिट शामिल हैं.
1.2.0 के बाद के मुख्य बदलाव
- नया स्टेट मैनेजर:
FragmentManager
के इंटरनल कोड को फिर से लिखने से, लाइफ़साइकल इवेंट, ऐनिमेशन, और ट्रांज़िशन को डिसपैच करने से जुड़ी कई समस्याएं ठीक हो गई हैं. साथ ही, यह भी ठीक हो गया है कि पोस्टपोन किए गए फ़्रैगमेंट को कैसे हैंडल किया जाता है. Activity Result API इंटिग्रेशन: Activity
1.2.0
में पेश किए गएActivityResultRegistry
एपीआई के लिए सहायता जोड़ी गई है. इससेstartActivityForResult()
+onActivityResult()
के साथ-साथrequestPermissions()
+onRequestPermissionsResult()
फ़्लो को भी हैंडल किया जा सकता है. इसके लिए, आपको अपने फ़्रैगमेंट में मौजूद तरीकों को बदलने की ज़रूरत नहीं होगी. साथ ही, इन फ़्लो की जांच करने के लिए हुक भी उपलब्ध कराए जाएंगे. अपडेट किया गया गतिविधि से नतीजा पाना लेख पढ़ें.- इस रिलीज़ में, अनुरोध के अमान्य कोड और अनुमति के अनुरोधों को भेजने से जुड़ी कई समस्याओं को ठीक किया गया है. इनकी वजह से, Activity Result API,
FragmentActivity
के पिछले वर्शन पर काम नहीं करता था.FragmentActivity
याAppCompatActivity
में Activity Result API का इस्तेमाल करने के लिए, आपको Fragment 1.3.0 पर अपग्रेड करना होगा.
- इस रिलीज़ में, अनुरोध के अमान्य कोड और अनुमति के अनुरोधों को भेजने से जुड़ी कई समस्याओं को ठीक किया गया है. इनकी वजह से, Activity Result API,
Fragment Result API:
FragmentManager
पर नए एपीआई के ज़रिए, दो फ़्रैगमेंट के बीच नतीजे पास करने की सुविधा जोड़ी गई है. यह हैरारकी फ़्रैगमेंट (पैरंट/चाइल्ड), DialogFragment, और नेविगेशन में मौजूद फ़्रैगमेंट के लिए काम करता है. साथ ही, यह पक्का करता है कि नतीजे सिर्फ़ आपके फ़्रैगमेंट को तब भेजे जाएं, जब वह कम से कमSTARTED
पर हो. इन नए एपीआई के लिए, टारगेट फ़्रैगमेंट एपीआई को बंद कर दिया गया है. Fragment Result API का इस्तेमाल करके नतीजे पाना लेख पढ़ें.FragmentOnAttachListener
:FragmentActivity
औरFragment
परonAttachFragment()
कॉलबैक अब काम नहीं करता है. ज़्यादा बेहतर विकल्प देने के लिए, एक नयाFragmentOnAttachListener
जोड़ा गया है. इससेonAttachFragment()
को अलग-अलग, टेस्ट किए जा सकने वाले लिसनर को सौंपा जा सकता है. साथ ही, अपने डायरेक्ट चाइल्ड FragmentManager के अलावा, FragmentManager में लिसनर जोड़ने की सुविधा भी मिलती है.FragmentScenario
सुधार:fragment-testing
आर्टफ़ैक्ट कीFragmentScenario
क्लास को Kotlin में फिर से लिखा गया है. साथ ही, इसमें कई सुधार किए गए हैं:FragmentScenario
अबmoveToState()
को लागू करने के लिएsetMaxLifecycle()
का इस्तेमाल करता है. इससे यह पक्का होता है कि सभी एपीआई लेवल पर एक जैसा व्यवहार हो और फ़्रैगमेंट की स्थिति को बुनियादी ऐक्टिविटी से अलग किया जा सके.FragmentScenario
अब शुरुआतीLifecycle.State
सेट करने की सुविधा देता है, ताकि हरLifecycle.State
पर पहली बार जाने से पहले फ़्रैगमेंट की स्थिति की पुष्टि की जा सके.- अब
onFragment
केFragmentScenario
एपीआई का एक विकल्प उपलब्ध है. यह Kotlin के रीफ़ाइड एक्सटेंशन मेथडwithFragment
के तौर पर उपलब्ध है. इसकी मदद से, वैल्यू वापस पाई जा सकती है. खास तौर पर, यह दिए गए ब्लॉक में जनरेट हुए अपवादों को फिर से थ्रो करता है.
ViewTree
सहायता:Fragment
अब लाइफ़साइकल2.3.0
और SavedState1.1.0
में जोड़े गएViewTreeLifecycleOwner.get(View)
,ViewTreeViewModelStoreOwner.get(View)
, औरViewTreeSavedStateRegistryOwner
एपीआई के साथ काम करता है. इससे,Fragment
मेंView
का इस्तेमाल करते समय, फ़्रैगमेंट कोViewModelStoreOwner
के तौर पर दिखाया जाएगा. साथ ही, फ़्रैगमेंट के व्यू लाइफ़साइकल से जुड़ेSavedStateRegistryOwner
औरLifecycleOwner
को दिखाया जाएगा.TRANSIT_
ऐनिमेशन में बदलाव: फ़्रैगमेंट के डिफ़ॉल्ट इफ़ेक्ट,TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
, औरTRANSIT_FRAGMENT_FADE
अबAnimation
के बजायAnimator
का इस्तेमाल करते हैं. इन ऐनिमेशन को बनाने के लिए इस्तेमाल किए गए संसाधन अब निजी हैं.setRetainInstance()
बंद होना: फ़्रैगमेंट पर मौजूदsetRetainInstance()
मेथड बंद कर दिया गया है. ViewModels के आने के बाद, डेवलपर के पास ऐसी स्थिति को बनाए रखने के लिए एक खास एपीआई होता है जिसे ऐक्टिविटी, फ़्रैगमेंट, और नेविगेशन ग्राफ़ से जोड़ा जा सकता है. इससे डेवलपर, सामान्य फ़्रैगमेंट का इस्तेमाल कर सकते हैं. साथ ही, वे अपनी पसंद की स्थिति को अलग रख सकते हैं. इससे डेटा लीक होने की सामान्य वजह से बचा जा सकता है. साथ ही, सेव की गई स्थिति को एक बार बनाने और मिटाने की काम की प्रॉपर्टी को बनाए रखा जा सकता है. जैसे,ViewModel
का कंस्ट्रक्टर और इसे मिलने वालाonCleared()
कॉलबैक.ViewPager 1 अडैप्टर का इस्तेमाल बंद होना: ViewPager2
1.0.0
के रिलीज़ होने के बाद,ViewPager
के साथ इंटरैक्ट करने के लिएFragmentPagerAdapter
औरFragmentStatePagerAdapter
क्लास का इस्तेमाल बंद कर दिया गया है. ViewPager से ViewPager2 पर माइग्रेट करना लेख पढ़ें.
वर्शन 1.3.0-rc02
27 जनवरी, 2021
androidx.fragment:fragment:1.3.0-rc02
, androidx.fragment:fragment-ktx:1.3.0-rc02
, और androidx.fragment:fragment-testing:1.3.0-rc02
रिलीज़ किए गए हैं. वर्शन 1.3.0-rc02 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- कॉन्फ़िगरेशन में बदलाव करने के बाद, माता-पिता
DialogFragment
के ऊपर बच्चेDialogFragment
के दिखने की समस्या को ठीक किया गया है. अब बच्चे के डायलॉग फ़्रैगमेंट हमेशा माता-पिता के डायलॉग फ़्रैगमेंट के ऊपर दिखेंगे. (I30806, b/177439520) - उस समस्या को ठीक किया गया है जिसमें
Animation
के साथhide
ऑपरेशन करने पर, ऐनिमेशन के आखिर में छिपा हुआ फ़्रैगमेंट फ़्लैश होता था. (I57e22, b/175417675) - व्यू हाइरार्की अटैच होने से पहले ट्रांज़िशन वाले फ़्रैगमेंट अब
RESUMED
तक सही तरीके से पहुंचते हैं. (I1fc1d, b/177154873)
स्टेट मैनेजर की नई सुविधा से जुड़ी गड़बड़ियां ठीक की गईं
- फ़्रैगमेंट का व्यू
Lifecycle
अब उन मामलों को सही तरीके से हैंडल करता है जहां फ़्रैगमेंट का व्यू,Lifecycle
केCREATED
तक पहुंचने से पहले ही खत्म हो जाता है. इससे “INITIALIZED से कोई इवेंट डाउन नहीं हुआ” बताने वाले अपवादों से बचा जा सकता है. (eda2bd, b/176138645) Animator
का इस्तेमाल करने वाले फ़्रैगमेंट अबFragmentContainerView
का इस्तेमाल करते समय सही क्रम में दिखते हैं. (Id9aa3, b/176089197)
वर्शन 1.3.0-rc01
16 दिसंबर, 2020
androidx.fragment:fragment:1.3.0-rc01
, androidx.fragment:fragment-ktx:1.3.0-rc01
, और androidx.fragment:fragment-testing:1.3.0-rc01
रिलीज़ किए गए हैं. वर्शन 1.3.0-rc01 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
onPrepareOptionsMenu()
अबonCreateOptionsMenu()
के लॉजिक को फ़ॉलो करता है. साथ ही, जब पैरंट फ़्रैगमेंटsetMenuVisibility(false)
को कॉल करता है, तब इसे कॉल नहीं किया जाता. (Id7de8, b/173203654)
स्टेट मैनेजर की नई सुविधा से जुड़ी गड़बड़ियां ठीक की गईं
Animation
वाले फ़्रैगमेंट कोFragmentContainerView
में जोड़ते समय, लीक और विज़ुअल आर्टफ़ैक्ट की समस्या ठीक की गई. इसके बाद, पॉप ऑपरेशन से उस फ़्रैगमेंट को जोड़ा गया. (I952d8)- उस समस्या को ठीक किया गया है जिसमें फ़्रैगमेंट के व्यू को व्यू हैरारकी में तब भी रखा जाता था, जब उसे
onCreate()
याonViewCreated()
तरीकों के दौरान बदल दिया जाता था. (I8a7d5) - अब फ़्रैगमेंट के रूट व्यू को फिर से शुरू करने पर, फ़ोकस को सही तरीके से वापस लाया जाता है. (Ifc84b)
- अब एक ही फ़्रैगमेंट ट्रांज़ैक्शन में पॉप और रिप्लेस ऑपरेशन को एक साथ इस्तेमाल करने पर, सही ऐनिमेशन (Ifd4e4, b/170328691) दिखेंगे
वर्शन 1.3.0-beta02
2 दिसंबर, 2020
androidx.fragment:fragment:1.3.0-beta02
, androidx.fragment:fragment-ktx:1.3.0-beta02
, और androidx.fragment:fragment-testing:1.3.0-beta02
रिलीज़ किए गए हैं. वर्शन 1.3.0-beta02 में ये कमिट शामिल हैं.
नई सुविधाएं
FragmentScenario
को पूरी तरह से Kotlin में बदल दिया गया है. साथ ही,FragmentScenario
के लिए Kotlin 1.4 के फ़ंक्शनल इंटरफ़ेस का इस्तेमाल करके, सोर्स और बाइनरी के साथ काम करने की सुविधा को बनाए रखा गया है.FragmentAction
(I19d31)
व्यवहार में बदलाव
class
याandroid:name
एट्रिब्यूट का इस्तेमाल करके फ़्रैगमेंट को बड़ा न करने वाले FragmentContainerViews को अबFragmentActivity
के बाहर इस्तेमाल किया जा सकता है. (Id4397, b/172266337)- अब किसी फ़्रैगमेंट के लाइफ़साइकल को
DESTROYED
पर सेट करने की कोशिश करने पर,IllegalArgumentException
(Ie7651, b/170765622) दिखेगा DESTROYED
स्थिति के साथ FragmentScenario को शुरू करने पर, अबIllegalArgumentException
(I73590, b/170765622) दिखेगा
स्टेट मैनेजर की नई सुविधा से जुड़ी गड़बड़ियां ठीक की गईं
- उस समस्या को ठीक किया गया है जिसमें
Animator
याTRANSIT_FRAGMENT_
विकल्पों में से किसी एक का इस्तेमाल करने वाले फ़्रैगमेंट ट्रांज़िशन को रोकने पर, व्यू अपनी फ़ाइनल स्थिति तक नहीं पहुंच पाता था. (I92426, b/169874632) Animation
से बाहर निकलने वाले फ़्रैगमेंट को सही तरीके से डिस्ट्रॉय करने में आ रही समस्या को ठीक किया गया है. (I83d65)- जिन फ़्रैगमेंट के इफ़ेक्ट को उलट दिया गया है वे अब सही तरीके से बंद हो जाते हैं और सही तरीके से शुरू होने वाले इफ़ेक्ट के साथ फिर से शुरू हो जाते हैं. (I62226, b/167092035)
- उस समस्या को ठीक किया गया है जिसकी वजह से
hide()
का एग्ज़िटAnimator
काम नहीं करता था. (Id7ffe) - फ़्रैगमेंट को कुछ समय के लिए रोकने के बाद तुरंत शुरू करने पर, अब वे ठीक से दिखते हैं. (Ie713b, b/170022857)
- ऐनिमेशन के दौरान फ़ोकस किए गए व्यू को हटाने वाले फ़्रैगमेंट, अलग किए गए व्यू पर फ़ोकस को वापस लाने की कोशिश नहीं करेंगे. ऐसा तब होगा, जब वे
RESUMED
(I38c65, b/172925703) पर पहुंच जाएंगे
बाहरी योगदान
FragmentFactory
अब अलग-अलगClassLoader
इंस्टेंस के लिए, फ़्रैगमेंट क्लास को अलग से कैश मेमोरी में सेव करता है. धन्यवाद, साइमन शिलर! (#87, b/113886460)
वर्शन 1.3.0-beta01
1 अक्टूबर, 2020
androidx.fragment:fragment:1.3.0-beta01
, androidx.fragment:fragment-ktx:1.3.0-beta01
, और androidx.fragment:fragment-testing:1.3.0-beta01
रिलीज़ किए गए हैं. वर्शन 1.3.0-beta01 में ये कमिट शामिल हैं.
नई सुविधाएं
setMaxLifecycle()
अबLifecycle
की स्थिति कोINITIALIZING
पर सेट करने की सुविधा देता है. हालांकि, ऐसा तब तक किया जा सकता है, जब तक फ़्रैगमेंट कोCREATED
में न ले जाया गया हो. (b/159662173)
एपीआई में हुए बदलाव
- Kotlin 1.4 का इस्तेमाल करने के लिए, androidx को अपग्रेड करें (Id6471, b/165307851, b/165300826)
व्यवहार में बदलाव
- फ़्रैगमेंट रिसॉर्स फ़ाइलों को सही तरीके से निजी के तौर पर सेट किया गया हो. (aosp/1425237)
गड़बड़ियां ठीक की गईं
<fragment>
टैग का इस्तेमाल करके बढ़ाए गए फ़्रैगमेंट, अब STARTED (I02f4c) पर जाने से पहले, कंटेनर में अपने व्यू जोड़े जाने तक सही तरीके से इंतज़ार करेंगे- अब दिखने वाले और फिर
setMaxLifecycle()
सेCREATED
होने वाले फ़्रैगमेंट, अपने एग्ज़िट इफ़ेक्ट को सही तरीके से लागू करते हैं. (b/165822335) - बैक स्टैक में नहीं जोड़े गए अलग किए गए फ़्रैगमेंट को हटाने से अब मेमोरी लीक नहीं होती है. निकलास ऐंसमन गिएर्ट्ज़ का शुक्रिया! (b/166489383)
- चालू फ़्रैगमेंट में अब हमेशा नॉन-शून्य
FragmentManager
होगा. साथ ही, नॉन-शून्यFragmentManager
वाले फ़्रैगमेंट को हमेशा चालू माना जाएगा. (aosp/1422346) - फ़्रैगमेंट के डिफ़ॉल्ट इफ़ेक्ट,
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
, औरTRANSIT_FRAGMENT_FADE
अबAnimation
के बजायAnimator
का इस्तेमाल करते हैं. (b/166155034)
स्टेट मैनेजर की नई सुविधा से जुड़ी गड़बड़ियां ठीक की गईं
- फ़्रैगमेंट अब ऐनिमेशन शुरू करने से ठीक पहले, व्यू फ़ोकस की स्थिति को सही तरीके से वापस लाते हैं. (Icc256)
- अब सिर्फ़ शेयर किए गए एलिमेंट ट्रांज़िशन वाले फ़्रैगमेंट, अपने खास इफ़ेक्ट को सही तरीके से पूरा करते हैं. इसका मतलब है कि वे अपनी फ़ाइनल स्थिति में चले जाते हैं (Iaebc7, b/166658128)
- अब फ़्रैगमेंट व्यू को खत्म करने से पहले, हमेशा कंटेनर से हटा दिया जाता है. (Id5876)
- नया स्टेट मैनेजर, अब हमेशा बाहर निकलने वाले फ़्रैगमेंट व्यू को हटाने के बाद ही, अंदर आने वाले फ़्रैगमेंट व्यू को जोड़ता है. (I41a6e)
- फ़्रैगमेंट व्यू की दिखने की स्थिति में किए गए साफ़ तौर पर बदलावों को अब नए स्टेट मैनेजर के हिसाब से लागू किया जाता है. इसका मतलब है कि अगर आपने ऐनिमेशन शुरू होने से पहले, किसी फ़्रैगमेंट के व्यू को
INVISIBLE
पर सेट किया है, तो वह वाकई में नहीं दिखेगा. (b/164481490) - अब फ़्रैगमेंट में
Animations
के बजायAnimators
को प्राथमिकता दी जाती है. इसका मतलब है कि अगर किसी फ़्रैगमेंट में दोनों मौजूद हैं, तो सिर्फ़Animator
चलेगा औरAnimation
को अनदेखा कर दिया जाएगा. (b/167579557) - नए स्टेट मैनेजर की वजह से, अब ऐनिमेशन डालते समय फ़्रैगमेंट फ़्लैश नहीं होते. (b/163084315)
आम समस्या
नए स्टेट मैनेजर का इस्तेमाल करते समय, अगर खास इफ़ेक्ट डालते समय पिछले फ़्रैगमेंट पर वापस जाने के बजाय, 'वापस जाएं' बटन दबाया जाता है, तो पुराना फ़्रैगमेंट कभी भी फिर से नहीं जोड़ा जाता. इससे स्क्रीन खाली हो जाती है. (b/167259187, b/167092035, b/168442830)
वर्शन 1.3.0-alpha08
19 अगस्त, 2020
androidx.fragment:fragment:1.3.0-alpha08
, androidx.fragment:fragment-ktx:1.3.0-alpha08
, और androidx.fragment:fragment-testing:1.3.0-alpha08
रिलीज़ किए गए हैं. वर्शन 1.3.0-alpha08 में ये कमिट शामिल हैं.
New State Manager
इस रिलीज़ में, FragmentManager
के इंटरनल स्टेट मैनेजमेंट को फिर से फ़ैक्टर किया गया है. इससे लाइफ़साइकल के तरीकों, ऐनिमेशन, और ट्रांज़िशन के डिस्पैच पर असर पड़ता है. साथ ही, इससे यह भी तय होता है कि स्थगित किए गए लेन-देन को कैसे हैंडल किया जाता है. यह सुविधा डिफ़ॉल्ट रूप से चालू रहती है. ज़्यादा जानकारी के लिए, Fragments: Rebuilding the Internals ब्लॉग पोस्ट देखें. (b/139536619, b/147749580)
FragmentManager.enableNewStateManager(boolean)
में मौजूद एक्सपेरिमेंटल एपीआई का इस्तेमाल करके, यह कंट्रोल किया जा सकता है कि FragmentManager, नए स्टेट मैनेजर का इस्तेमाल करे या नहीं. (I7b6ee)
नीचे दी गई समस्याएं सिर्फ़ नए स्टेट मैनेजर का इस्तेमाल करने पर ठीक होती हैं:
replace
ऑपरेशन के पिछले फ़्रैगमेंट को अब नए फ़्रैगमेंट के शुरू होने से पहले सही तरीके से बंद कर दिया गया है. (b/161654580)- अब फ़्रैगमेंट, एक ही फ़्रैगमेंट पर एक साथ कई ऐनिमेशन चलाने से रोकते हैं. इससे उन मामलों से बचा जा सकता है जहां
Animation
, सभीTransition
इफ़ेक्ट को बदल देता है या किसी फ़्रैगमेंट परAnimator
औरTransition
, दोनों एक साथ चलते हैं. (b/149569323) - अब सिर्फ़ आखिरी फ़्रैगमेंट के एंटर होने और पहले फ़्रैगमेंट के एग्ज़िट होने के बजाय, एंटर और एग्ज़िट होने वाले सभी फ़्रैगमेंट के
enterTransition
औरexitTranstion
को चलाया जाता है. (b/149344150) - जिन फ़्रैगमेंट को कुछ समय के लिए रोक दिया गया है वे अब
CREATED
स्थिति में नहीं रहते. इसके बजाय, वे अन्य फ़्रैगमेंट के साथSTARTED
स्थिति में चले जाते हैं. (b/129035555) - हमने उस समस्या को ठीक कर दिया है जिसमें
FragmentManager
, लेन-देन को फिर से ऑर्डर करने की सुविधा के तहत किए गए लेन-देन और बिना रीऑर्डर किए गए लेन-देन को एक साथ प्रोसेस करते समय, लेन-देन को गलत क्रम में प्रोसेस करता था. (b/147297731) - एक साथ कई फ़्रैगमेंट हटाने पर, फ़्रैगमेंट को कुछ समय के लिए पोस्टपोन करने पर, इंटरमीडिएट फ़्रैगमेंट कुछ समय के लिए नहीं दिखेंगे. (b/37140383)
FragmentManager
अबonAttachFragment()
कॉलबैक सेfindFragmentById()
याfindFragmentByTag()
को कॉल करने पर सही फ़्रैगमेंट दिखाता है. (b/153082833)- अगर फ़्रैगमेंट को बदलने की प्रोसेस को कुछ समय के लिए रोक दिया जाता है, तो फ़्रैगमेंट के खत्म होने पर अब
onCreateView()
को कॉल नहीं किया जाता. (b/143915710) - फ़्रेमवर्क
Transition
और AndroidXTransition
इंस्टेंस को एक साथ इस्तेमाल करने की कोशिश करते समय दिखने वाले गड़बड़ी के मैसेज में, अब अमान्य ट्रांज़िशन वाले फ़्रैगमेंट का ज़िक्र किया गया है. (b/155574969)
व्यवहार में बदलाव
- अब फ़्रैगमेंट के
onCreate()
लाइफ़साइकल के तरीके में,ActivityResultLauncher
परlaunch()
को कॉल किया जा सकता है. (b/161464278) - अब
registerForActivityResult()
को कॉल करने के बादregisterForActivityResult()
को कॉल करने पर, एक अपवाद दिखता है. इससे पता चलता है कि इसकी अनुमति नहीं है. कॉन्फ़िगरेशन में बदलाव करने के बाद, नतीजे नहीं दिखाने के बजाय यह अपवाद दिखता है.onCreate()
(b/162255449) FragmentActivity
अबOnContextAvailableListener
की स्थिति को वापस लाने के लिए, गतिविधि1.2.0-alpha08
में पेश किए गएOnContextAvailableListener
एपीआई का इस्तेमाल करता है.FragmentManager
FragmentActivity
की सबक्लास में जोड़े गए सभी लिसनर, इस लिसनर के बाद चलेंगे. (I513da)
गड़बड़ियां ठीक की गईं
startIntentSenderForResult()
का इस्तेमाल करते समय,ActivityOptions
के ज़रिए पास किए गए पैरामीटर अब काम करते हैं. (b/162247961)
आम समस्या
- नए स्टेट मैनेजर का इस्तेमाल करते समय,
onViewCreated()
के बाद औरonResume()
से पहले फ़्रैगमेंट के रूट व्यू की दृश्यता को सीधे तौर पर सेट करने से, सेट की गई दृश्यता कोFragmentManager
बदल देता है.FragmentManager
, रूट व्यू की दृश्यता को कंट्रोल करता है. इसके बजाय, आपको अपने फ़्रैगमेंट के दिखने की सेटिंग बदलने के लिए, हमेशाhide()
औरshow()
कार्रवाइयों का इस्तेमाल करना चाहिए. (b/164481490)
वर्शन 1.3.0-alpha07
22 जुलाई, 2020
androidx.fragment:fragment:1.3.0-alpha07
, androidx.fragment:fragment-ktx:1.3.0-alpha07
, और androidx.fragment:fragment-testing:1.3.0-alpha07
रिलीज़ किए गए हैं. वर्शन 1.3.0-alpha07 में ये कमिट शामिल हैं.
नई सुविधाएं
FragmentScenario
अबCREATED
,STARTED
याRESUMED
के लिए, लाइफ़साइकल की शुरुआती स्थिति सेट करने की सुविधा देता है. इससे फ़्रैगमेंट को हमेशाRESUMED
स्थिति में ले जाने की ज़रूरत नहीं पड़ती. (b/159662750)onFragment
केFragmentScenario
एपीआई के विकल्प के तौर पर, Kotlin का रीफ़ाइड एक्सटेंशन मेथडwithFragment
जोड़ा गया है. इससे आपको वैल्यू वापस पाने की सुविधा मिलती है. खास तौर पर, यह दिए गए ब्लॉक में जनरेट हुए अपवादों को फिर से थ्रो करता है. (b/158697631)
व्यवहार में बदलाव
FragmentScenario
अबmoveToState()
को लागू करने के लिएsetMaxLifecycle()
का इस्तेमाल करता है. इससे यह पक्का होता है कि सभी एपीआई लेवल पर एक जैसा व्यवहार हो और फ़्रैगमेंट की स्थिति को बुनियादी ऐक्टिविटी से अलग किया जा सके. (b/156527405)ViewTreeSavedStateRegistryOwner
से मिलाSavedStateRegistryOwner
अब फ़्रैगमेंट व्यू के लाइफ़साइकल से जुड़ा है. इससे यह पक्का होता है कि इसका स्टेटस सेव हो गया है और इसे फ़्रैगमेंट के व्यू के साथ ही वापस लाया जा सकता है. (b/158503763)
गड़बड़ियां ठीक की गईं
- अब फ़्रैगमेंट, फ़्रैगमेंट के व्यू के अटैच होने का इंतज़ार करते हैं. इसके बाद, वे
ViewCompat.requestApplyInsets()
को कॉल करते हैं. इससे उन मामलों से बचा जा सकेगा जहां इंसर्ट करने का अनुरोध खारिज कर दिया जाता था. (b/158095749) clearFragmentResultListener
को कॉल करने पर, अब लाइफ़साइकल ऑब्ज़र्वर को सही तरीके से हटाया जाता है. (b/159274993)
वर्शन 1.3.0-alpha06
10 जून, 2020
androidx.fragment:fragment:1.3.0-alpha06
, androidx.fragment:fragment-ktx:1.3.0-alpha06
, और androidx.fragment:fragment-testing:1.3.0-alpha06
रिलीज़ किए गए हैं. वर्शन 1.3.0-alpha06 में ये कमिट शामिल हैं.
नई सुविधाएं
FragmentActivity
औरFragment
परonAttachFragment()
कॉलबैक का इस्तेमाल अब नहीं किया जा सकता. ज़्यादा बेहतर विकल्प देने के लिए, एक नयाFragmentOnAttachListener
जोड़ा गया है. इससेonAttachFragment()
को अलग-अलग, टेस्ट किए जा सकने वाले लिसनर को सौंपा जा सकता है. साथ ही, अपने डायरेक्ट चाइल्ड FragmentManager के अलावा, FragmentManager में लिसनर जोड़ने की सुविधा भी मिलती है. (I06d3d)
गड़बड़ियां ठीक की गईं
- अब पैरंट फ़्रैगमेंट के व्यू की स्थिति को, चाइल्ड फ़्रैगमेंट से पहले वापस लाया जाता है. इससे कॉन्फ़िगरेशन में बदलाव होने के बाद, विज़ुअल ऑर्डरिंग से जुड़ी समस्या ठीक हो जाती है. ऐसा तब होता है, जब
DialogFragment
, किसी दूसरेDialogFragment
को चाइल्ड फ़्रैगमेंट के तौर पर दिखाता है. (b/157195715) - उस समस्या को ठीक किया गया है जिसमें
UseRequireInsteadOfGet
Lint check,?.
और!!
ऑपरेटर के चेन किए गए इस्तेमाल को सही तरीके से हैंडल नहीं करता था. (b/157677616)
वर्शन 1.3.0-alpha05
20 मई, 2020
androidx.fragment:fragment:1.3.0-alpha05
, androidx.fragment:fragment-ktx:1.3.0-alpha05
, और androidx.fragment:fragment-testing:1.3.0-alpha05
रिलीज़ किए गए हैं. वर्शन 1.3.0-alpha05 में ये कमिट शामिल हैं.
नई सुविधाएं
Fragment
मेंView
का इस्तेमाल करते समय, लाइफ़साइकल2.3.0-alpha03
सेViewTreeViewModelStoreOwner
और SavedState1.1.0-alpha01
सेViewTreeSavedStateRegistryOwner
के काम करने की सुविधा जोड़ी गई है. (aosp/1297993, aosp/1300264)
एपीआई में हुए बदलाव
setFragmentResult()
औरsetFragmentResultListener()
एपीआई अब नॉन-नलBundle
औरFragmentResultListener
लेते हैं. पहले से सेट किए गए किसी नतीजे या लिसनर को साफ़ तौर पर हटाने के लिए, नएclearFragmentResult()
औरclearFragmentResultListener()
तरीकों का इस्तेमाल करें. (b/155416778)setFragmentResultListener()
Kotlin के उन एक्सटेंशन को अबinline
के तौर पर मार्क किया गया है जो लैम्डा लेते हैं. (b/155323404)
व्यवहार में बदलाव
Fragment
पर पहले बंद किए गएstartActivityForResult()
,startIntentSenderForResult()
, औरrequestPermissions
अब अंदरूनी तौर परActivityResultRegistry
का इस्तेमाल करते हैं. इसलिए, इन एपीआई का इस्तेमाल करते समय, अनुरोध कोड के लिए सिर्फ़ निचले बिट (0xFFFF
से कम) का इस्तेमाल करने की पाबंदी हटा दी गई है. (b/155518741)
दस्तावेज़ से जुड़े अपडेट
Fragment(@LayoutRes int)
औरDialogFragment(@LayoutRes int)
कंस्ट्रक्टर के बारे में ज़्यादा जानकारी दी गई है. इससे यह साफ़ तौर पर पता चलता है कि डिफ़ॉल्टFragmentFactory
का इस्तेमाल करते समय, उन्हें आपकी सबक्लास के नो-आर्ग्युमेंट कंस्ट्रक्टर से कॉल किया जाना चाहिए. (b/153042497)
वर्शन 1.3.0-alpha04
29 अप्रैल, 2020
androidx.fragment:fragment:1.3.0-alpha04
, androidx.fragment:fragment-ktx:1.3.0-alpha04
, और androidx.fragment:fragment-testing:1.3.0-alpha04
रिलीज़ किए गए हैं. वर्शन 1.3.0-alpha04 में ये कमिट शामिल हैं.
नई सुविधाएं
FragmentManager
पर नए एपीआई के ज़रिए, दो फ़्रैगमेंट के बीच नतीजे पास करने की सुविधा जोड़ी गई है. यह हैरारकी फ़्रैगमेंट (पैरंट/चाइल्ड), DialogFragment, और नेविगेशन में मौजूद फ़्रैगमेंट के लिए काम करता है. साथ ही, यह पक्का करता है कि नतीजे सिर्फ़ आपके फ़्रैगमेंट को तब भेजे जाएं, जब वह कम से कमSTARTED
पर हो. (b/149787344)
एपीआई में हुए बदलाव
- टारगेट फ़्रैगमेंट एपीआई को बंद कर दिया गया है. फ़्रैगमेंट के बीच डेटा पास करने के लिए, नए Fragment Result API का इस्तेमाल किया जाना चाहिए. (b/149787344)
- Fragment पर मौजूद
startActivityForResult()
/onActivityResult()
औरrequestPermissions()
/onRequestPermissionsResult()
एपीआई बंद कर दिए गए हैं. कृपया Activity Result APIs का इस्तेमाल करें. (aosp/1290887) - गतिविधि
1.2.0-alpha04
में बदलाव:prepareCall()
तरीके का नाम बदलकरregisterForActivityResult()
कर दिया गया है. (aosp/1278717)
गड़बड़ियां ठीक की गईं
- फ़्रैगमेंट का
getViewLifecycleOwner()
अबonSaveInstanceState()
को कॉल करने से पहले बंद हो जाता है. इससे फ़्रैगमेंट के लाइफ़साइकल का व्यवहार दिखता है. (b/154645875) - अब फ़्रैगमेंट पर
setMenuVisibility(false)
को कॉल करने से, उसके चाइल्ड फ़्रैगमेंट के दिए गए मेन्यू की दिखने की सेटिंग में सही तरीके से बदलाव होता है. (b/153593580) FragmentContainerView
की मदद से,DialogFragment
की व्यू हैरारकी में फ़्रैगमेंट जोड़ते समय,illegalStateException
को ठीक किया गया. (b/154366601)- फ़्रैगमेंट को किसी गतिविधि से बाहर होस्ट करने पर, फ़्रैगमेंट पर
getDefaultViewModelProviderFactory()
तरीके का इस्तेमाल करने पर अब क्रैश नहीं होता. (b/153762914)
वर्शन 1.3.0-alpha03
1 अप्रैल, 2020
androidx.fragment:fragment:1.3.0-alpha03
, androidx.fragment:fragment-ktx:1.3.0-alpha03
, और androidx.fragment:fragment-testing:1.3.0-alpha03
रिलीज़ किए गए हैं. वर्शन 1.3.0-alpha03 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
Fragment
पर पेमेंट केprepareCall
तरीके अबfinal
हैं. (b/152439361)
गड़बड़ियां ठीक की गईं
BottomSheetDialogFragment
का इस्तेमाल करते समय, Fragment1.3.0-alpha02
में हुई रिग्रेशन की समस्या को ठीक किया गया है. (b/151652127, aosp/1263328, aosp/1265163)- कॉन्फ़िगरेशन में बदलाव होने के बाद, फ़्रैगमेंट से
prepareCall
का इस्तेमाल करते समय क्रैश होने की समस्या ठीक की गई. (b/152137004) setTargetFragment()
का इस्तेमाल करते समय, शेयर किए गए एलिमेंट और एक्ज़िट ट्रांज़िशन को अनदेखा करने की समस्या को ठीक किया गया है. (b/152023196)- Fragment
1.2.4
: Fragment ProGuard के नियमों को अपडेट किया गया है, ताकि रखे गए फ़्रैगमेंट्स को अस्पष्ट किया जा सके. (b/151605338) - Fragment
1.2.4
:DialogFragment
क्लास परFragmentLiveDataObserve
Lint नियम बंद कर दिया गया है, क्योंकि इनका लाइफ़साइकल और व्यू लाइफ़साइकल हमेशा सिंक होता है. इसलिए,observe
को कॉल करते समयthis
याviewLifecycleOwner
में से किसी एक का इस्तेमाल करना सुरक्षित होता है. (b/151765086)
डिपेंडेंसी में बदलाव
- फ़्रैगमेंट, गतिविधि
1.2.0-alpha03
पर निर्भर करते हैं. इसमें गतिविधि के नतीजे के एपीआई में काफ़ी सुधार किए गए हैं. यह एपीआई, गतिविधि1.2.0-alpha02
में पेश किया गया था.
वर्शन 1.3.0-alpha02
18 मार्च, 2020
androidx.fragment:fragment:1.3.0-alpha02
, androidx.fragment:fragment-ktx:1.3.0-alpha02
, और androidx.fragment:fragment-testing:1.3.0-alpha02
रिलीज़ किए गए हैं. वर्शन 1.3.0-alpha02 में ये कमिट शामिल हैं.
नई सुविधाएं
- Activity
1.2.0-alpha02
में पेश किए गएActivityResultRegistry
एपीआई के लिए सहायता जोड़ी गई है. इससेstartActivityForResult()
+onActivityResult()
औरrequestPermissions()
+onRequestPermissionsResult()
फ़्लो को हैंडल किया जा सकता है. इसके लिए, आपको अपने फ़्रैगमेंट में मौजूद तरीकों को बदलने की ज़रूरत नहीं होगी. साथ ही, इन फ़्लो को टेस्ट करने के लिए हुक भी उपलब्ध कराए जाएंगे. अपडेट किया गया गतिविधि से नतीजा पाना लेख पढ़ें. (b/125158199)
एपीआई में हुए बदलाव
DialogFragment
अब एक कंस्ट्रक्टर उपलब्ध कराता है. यह एक@LayoutRes
लेता है, जो उस लेआउट के बारे में बताता है जिसेonCreateView()
को डिफ़ॉल्ट रूप से इनफ़्लेट करना चाहिए. (b/150327080)onActivityCreated()
तरीके का अब इस्तेमाल नहीं किया जा सकता. फ़्रैगमेंट के व्यू से जुड़े कोड कोonViewCreated()
में लिखा जाना चाहिए. इसेonActivityCreated()
से ठीक पहले कॉल किया जाता है. साथ ही, अन्य इनिशियलाइज़ेशन कोड कोonCreate()
में लिखा जाना चाहिए. गतिविधि काonCreate()
पूरा होने पर कॉलबैक पाने के लिए,onAttach()
में गतिविधि केLifecycle
परLifeCycleObserver
रजिस्टर किया जाना चाहिए. साथ ही,onCreate()
कॉलबैक मिलने के बाद इसे हटा दिया जाना चाहिए. (b/144309266)
गड़बड़ियां ठीक की गईं
- फ़्रैगमेंट
1.2.3
:DialogFragment
में मौजूद एक गड़बड़ी को ठीक किया गया है. इस गड़बड़ी की वजह से,onCreateDialog()
सेgetLayoutInflater()
को कॉल करने परStackOverflowError
होता था. (b/117894767, aosp/1258664) - Fragment
1.2.3
: Fragment में शामिल ProGuard नियमों का दायरा कम किया गया है, ताकि यह पक्का किया जा सके कि इस्तेमाल न की गई Fragment क्लास को हटाया जा सके. (b/149665169) - फ़्रैगमेंट
1.2.3
से: Kotlin प्रॉपर्टी के नाम को शैडो करने वाले लोकल वैरिएबल के नाम का इस्तेमाल करते समय,UseRequireInsteadOfGet
लिंट चेक में फ़ॉल्स पॉज़िटिव की समस्या ठीक की गई. (b/149891163) - फ़्रैगमेंट
1.2.3
से: लेआउट के प्रीव्यू में गलत कंस्ट्रक्टर का इस्तेमाल करने पर,FragmentContainerView
अबUnsupportedOperationException
नहीं दिखाता है. (b/149707833)
ऐसी समस्याएं जिनके बारे में जानकारी पहले से है
BottomSheetDialogFragment
अब स्क्रीन पर डायलॉग को सही तरीके से नहीं दिखाता है. (b/151652127)
वर्शन 1.3.0-alpha01
4 मार्च, 2020
androidx.fragment:fragment:1.3.0-alpha01
, androidx.fragment:fragment-ktx:1.3.0-alpha01
, और androidx.fragment:fragment-testing:1.3.0-alpha01
रिलीज़ किए गए हैं. वर्शन 1.3.0-alpha01 में ये कमिट शामिल हैं.
नई सुविधाएं
- लाइफ़साइकल
2.3.0-alpha01
में जोड़े गएViewTreeLifecycleOwner.get(View)
एपीआई के लिए सहायता जोड़ी गई है, ताकि यहonCreateView()
से मिले किसी भी व्यू के लिए, फ़्रैगमेंट केviewLifecycleOwner
कोLifecycleOwner
के तौर पर दिखा सके. (aosp/1182955)
एपीआई में हुए बदलाव
- Fragments पर
setRetainInstance()
तरीके को बंद कर दिया गया है. ViewModels के आने के बाद, डेवलपर के पास ऐसी स्थिति को बनाए रखने के लिए एक खास एपीआई होता है जिसे ऐक्टिविटी, फ़्रैगमेंट, और नेविगेशन ग्राफ़ से जोड़ा जा सकता है. इससे डेवलपर, सामान्य फ़्रैगमेंट का इस्तेमाल कर सकते हैं. साथ ही, वे अपनी पसंद की स्थिति को अलग रख सकते हैं. इससे डेटा लीक होने की सामान्य वजह से बचा जा सकता है. साथ ही, सेव की गई स्थिति को एक बार बनाने और मिटाने की काम की प्रॉपर्टी को बनाए रखा जा सकता है. जैसे,ViewModel
का कंस्ट्रक्टर और इसे मिलने वालाonCleared()
कॉलबैक. (b/143911815) - ViewPager2
1.0.0
के रिलीज़ होने के बाद,ViewPager
के साथ इंटरैक्ट करने के लिए इस्तेमाल की जाने वालीFragmentPagerAdapter
औरFragmentStatePagerAdapter
क्लास को बंद कर दिया गया है. ViewPager से ViewPager2 पर माइग्रेट करना लेख पढ़ें. (b/145132715)
गड़बड़ियां ठीक की गईं
- Fragment ProGuard के नियम अब सिर्फ़ उन
Fragment
क्लास के डिफ़ॉल्ट कंस्ट्रक्टर को सही तरीके से सेव करते हैं जिनका इस्तेमाल किया जाता है. ऐसा सभीFragment
इंस्टेंस के लिए नहीं किया जाता. इससे Fragment1.2.1
में हुई रिग्रेशन की समस्या ठीक हो गई है. (b/149665169 - Fragment
1.2.2
में जोड़े गएrequire___()
लिंट के नियम, अब उन लोकल वैरिएबल के लिए फ़ॉल्स पॉज़िटिव नहीं होते जिनका नाम, शैडो की गई Kotlin प्रॉपर्टी के नामों (जैसे किview
). (b/149891163) FragmentContainerView
अब Android Studio में लेआउट की झलक देखते समय,UnsupportedOperationException
नहीं दिखाता है. (b/149707833)- उस समस्या को ठीक किया गया है जिसमें स्टेट सेव होने के बाद जोड़े गए बनाए रखे गए फ़्रैगमेंट, लगातार फिर से नहीं बनाए जाते थे. साथ ही, कॉन्फ़िगरेशन में हर बदलाव के बाद उन्हें मिटा दिया जाता था. (b/145832397)
वर्शन 1.2.5
वर्शन 1.2.5
10 जून, 2020
androidx.fragment:fragment:1.2.5
, androidx.fragment:fragment-ktx:1.2.5
, और androidx.fragment:fragment-testing:1.2.5
रिलीज़ किए गए हैं. वर्शन 1.2.5 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- फ़्रैगमेंट का
getViewLifecycleOwner()
अबonSaveInstanceState()
को कॉल करने से पहले बंद हो जाता है. इससे फ़्रैगमेंट के लाइफ़साइकल का व्यवहार दिखता है. इसे पहले Fragment1.3.0-alpha04
में रिलीज़ किया गया था. (b/154645875) - अब फ़्रैगमेंट पर
setMenuVisibility(false)
को कॉल करने से, उसके चाइल्ड फ़्रैगमेंट के दिए गए मेन्यू की दिखने की सेटिंग में सही तरीके से बदलाव होता है. इसे पहले Fragment1.3.0-alpha04
में रिलीज़ किया गया था. (b/153593580)
वर्शन 1.2.4
वर्शन 1.2.4
1 अप्रैल, 2020
androidx.fragment:fragment:1.2.4
, androidx.fragment:fragment-ktx:1.2.4
, और androidx.fragment:fragment-testing:1.2.4
रिलीज़ किए गए हैं. वर्शन 1.2.4 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- Fragment ProGuard के नियमों को अपडेट किया गया है, ताकि बनाए रखे गए फ़्रैगमेंट को छिपाया जा सके. (b/151605338)
DialogFragment
क्लास परFragmentLiveDataObserve
लिंट नियम बंद कर दिया गया है, क्योंकि इनका लाइफ़साइकल और व्यू लाइफ़साइकल हमेशा सिंक में रहता है. इसलिए,observe
को कॉल करते समयthis
याviewLifecycleOwner
में से किसी एक का इस्तेमाल करना सुरक्षित होता है. (b/151765086)
वर्शन 1.2.3
वर्शन 1.2.3
18 मार्च, 2020
androidx.fragment:fragment:1.2.3
, androidx.fragment:fragment-ktx:1.2.3
, और androidx.fragment:fragment-testing:1.2.3
रिलीज़ किए गए हैं. वर्शन 1.2.3 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
DialogFragment
में मौजूद उस गड़बड़ी को ठीक कर दिया गया है जिसकी वजह सेonCreateDialog()
में मौजूदgetLayoutInflater()
को कॉल करने परStackOverflowError
होता था. (b/117894767, aosp/1258665)- Fragment में शामिल ProGuard नियमों का दायरा कम किया गया है, ताकि इस्तेमाल न की गई Fragment क्लास को हटाया जा सके. (b/149665169)
- स्थानीय वैरिएबल के ऐसे नाम का इस्तेमाल करने पर,
UseRequireInsteadOfGet
लिंट चेक में फ़ॉल्स पॉज़िटिव की समस्या ठीक की गई है जो Kotlin प्रॉपर्टी के नाम से मेल खाता है. (b/149891163) FragmentContainerView
अब लेआउट की झलक में गलत कंस्ट्रक्टर का इस्तेमाल करने पर,UnsupportedOperationException
नहीं दिखाता है. (b/149707833)
वर्शन 1.2.2
वर्शन 1.2.2
19 फ़रवरी, 2020
androidx.fragment:fragment:1.2.2
, androidx.fragment:fragment-ktx:1.2.2
, और androidx.fragment:fragment-testing:1.2.2
रिलीज़ किए गए हैं. वर्शन 1.2.2 में ये कमिट शामिल हैं.
लिंट की नई जांचें
- Lint,
onCreateView()
,onViewCreated()
, औरonActivityCreated()
मेंOnBackPressedDispatcher
को कॉल करने के लिए,LifecycleOwner
के तौर परviewLifecycleOwner
का इस्तेमाल करने का सुझाव देता है. (b/142117657) - नया Lint चेक जोड़ा गया है. इससे यह पुष्टि होती है कि
fragment-testing
आर्टफ़ैक्ट का इस्तेमाल करते समय,debugImplementation
एट्रिब्यूट का सही तरीके से इस्तेमाल किया जा रहा है. (b/141500106) - फ़्रैगमेंट अब
checkNotNull(get___())
,requireNonNull(get___())
याget___()!!
के बजाय, गड़बड़ी के बारे में ज़्यादा जानकारी देने वाले मैसेज के लिए, उससे जुड़ेrequire___()
तरीकों का इस्तेमाल करने का सुझाव देते हैं. ऐसा उन सभी Fragment API के लिए किया जाता है जिनमेंget
औरrequire
, दोनों शामिल हैं. (aosp/1202883)
गड़बड़ियां ठीक की गईं
- R8 की चेतावनियों से बचने के लिए, Fragment ProGuard फ़ाइलों को ठीक किया गया (b/148963981)
- मौजूदा लिंट चेक को बेहतर बनाया गया है. इसमें
observe
का इस्तेमाल करते समय,viewLifecycleOwner
का इस्तेमाल करने का सुझाव दिया गया है, ताकिobserve
केlivedata-ktx
एक्सटेंशन मेथड वर्शन को भी हैंडल किया जा सके. (b/148996309) - Lint की कई जांचों के लिए फ़ॉर्मैटिंग से जुड़ी समस्या ठीक की गई (aosp/1157012)
बाहरी योगदान
- Slack की ओर से
require___()
Lint की जांच करने में योगदान देने के लिए, Zac Sweers को धन्यवाद! (aosp/1202883)
वर्शन 1.2.1
वर्शन 1.2.1
5 फ़रवरी, 2020
androidx.fragment:fragment:1.2.1
, androidx.fragment:fragment-ktx:1.2.1
, और androidx.fragment:fragment-testing:1.2.1
रिलीज़ किए गए हैं. वर्शन 1.2.1 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
add
औरreplace
तरीकों से जोड़े गए फ़्रैगमेंट, अब अपने डिफ़ॉल्ट कंस्ट्रक्टर को ProGuard के साथ रखते हैं. ये फ़्रैगमेंट,Class
इंस्टेंस (या Kotlin के रीफ़ाइड वर्शन) लेते हैं. (b/148181315)FragmentStatePagerAdapter
औरFragmentPagerAdapter
, अबfinishUpdate()
को चलाने परFragmentManager
से मिले अपवादों को नहीं पकड़ते. (aosp/1208711)- उस समस्या को ठीक किया गया है जिसकी वजह से
FragmentManager.findFragment()
,<fragment>
टैग के ज़रिए जोड़े गए फ़्रैगमेंट के साथ काम नहीं करता था. (b/147784323) <fragment>
टैग का इस्तेमाल करके बढ़ाए गए फ़्रैगमेंट को अब लेआउट में होने पर, हमेशाonCreate()
से पहलेonInflate()
पर कॉल मिलता है. (aosp/1215856)- जब गतिविधि पहले ही खत्म हो चुकी हो, तब
FragmentManager
इंस्टेंस पर CallingtoString()
अबNullPointerException
नहीं दिखाता है. (b/148189412)
डिपेंडेंसी में बदलाव
- फ़्रैगमेंट
1.2.1
अब लाइफ़साइकल ViewModel SavedState2.2.0
पर निर्भर करता है.
वर्शन 1.2.0
वर्शन 1.2.0
22 जनवरी, 2020
androidx.fragment:fragment:1.2.0
, androidx.fragment:fragment-ktx:1.2.0
, और androidx.fragment:fragment-testing:1.2.0
रिलीज़ किए गए हैं. वर्शन 1.2.0 में ये कमिट शामिल हैं.
1.1.0 के बाद हुए अहम बदलाव
- FragmentContainerView:
FragmentContainerView
, डाइनैमिक तरीके से जोड़े गए फ़्रैगमेंट के लिए सबसे सही कंटेनर है. यहFrameLayout
या अन्य लेआउट की जगह इस्तेमाल किया जाता है. यह<fragment>
टैग की तरह हीclass
,android:name
, औरandroid:tag
(ज़रूरी नहीं) का इस्तेमाल करता है. हालांकि, यह शुरुआती फ़्रैगमेंट को जोड़ने के लिए,<fragment>
के कस्टम कोड पाथ के बजाय सामान्यFragmentTransaction
का इस्तेमाल करता है. onDestroyView()
टाइमिंग: अब फ़्रैगमेंट,onDestroyView()
को कॉल करने से पहले, एक्ज़िट ऐनिमेशन, एक्ज़िट फ़्रेमवर्क ट्रांज़िशन, और एक्ज़िट AndroidX ट्रांज़िशन (ट्रांज़िशन1.3.0
का इस्तेमाल करते समय) के पूरा होने का इंतज़ार करते हैं.- क्लास पर आधारित
add()
औरreplace()
:FragmentTransaction
परadd()
औरreplace()
के नए ओवरलोड जोड़े गए हैं. येClass<? extends Fragment>
औरBundle
के वैकल्पिक आर्ग्युमेंट लेते हैं. ये तरीके, जोड़ने के लिए Fragment का इंस्टेंस बनाने के लिए, आपकेFragmentFactory
का इस्तेमाल करते हैं. रीफ़ाइड टाइप (यानी किfragmentTransaction.replace<YourFragment>(R.id.container)
) का इस्तेमाल करने वाले Kotlin एक्सटेंशन को भीfragment-ktx
में जोड़ा गया है. - लाइफ़साइकल ViewModel SavedState इंटिग्रेशन:
SavedStateViewModelFactory
अब डिफ़ॉल्ट फ़ैक्ट्री है. इसका इस्तेमालby viewModels()
,by activityViewModels()
,ViewModelProvider
कंस्ट्रक्टर या फ़्रैगमेंट के साथViewModelProviders.of()
का इस्तेमाल करते समय किया जाता है. - लिंट की नई जांच: लिंट की एक नई जांच जोड़ी गई है. इससे यह पक्का किया जा सकेगा कि
onCreateView()
,onViewCreated()
याonActivityCreated()
सेLiveData
को मॉनिटर करते समय,getViewLifecycleOwner()
का इस्तेमाल किया जा रहा हो. getFragmentManager()
बंद होना: Fragment पर मौजूदgetFragmentManager()
औरrequireFragmentManager()
तरीकों को बंद कर दिया गया है. इनकी जगहgetParentFragmentManager()
तरीके का इस्तेमाल किया जा सकता है. यह तरीका, Fragment को जोड़े गए नॉन-शून्यFragmentManager
को दिखाता है.isAdded()
का इस्तेमाल करके यह पता लगाया जा सकता है कि इसे कॉल करना सुरक्षित है या नहीं.FragmentManager.enableDebugLogging()
बंद होना: स्टैटिकFragmentManager.enableDebugLogging
तरीका बंद हो गया है. FragmentManager अब टैगFragmentManager
के लिएLog.isLoggable()
का पालन करता है. इससे आपको अपने ऐप्लिकेशन को फिर से कंपाइल किए बिना,DEBUG
याVERBOSE
लॉगिंग को चालू करने की सुविधा मिलती है.
ऐसी समस्याएं जिनके बारे में जानकारी पहले से है
- सिर्फ़
class
याandroid:name
एट्रिब्यूट के ज़रिएFragmentContainerView
पर रेफ़र किए गए फ़्रैगमेंट को ProGuard अपने-आप नहीं रखता है. इसलिए, आपको हर फ़्रैगमेंट क्लास के लिए, मैन्युअल तरीके से कीप नियम जोड़ना होगा. (b/142601969) FragmentContainerView
के साथ एक्सएमएल मेंclass
याandroid:name
का इस्तेमाल करकेNavHostFragment
जोड़ते समय, अपनी गतिविधि केonCreate()
मेंfindNavController()
का इस्तेमाल नहीं किया जा सकता. (b/142847973)
वर्शन 1.2.0-rc05
8 जनवरी, 2020
androidx.fragment:fragment:1.2.0-rc05
, androidx.fragment:fragment-ktx:1.2.0-rc05
, और androidx.fragment:fragment-testing:1.2.0-rc05
रिलीज़ किए गए हैं. वर्शन 1.2.0-rc05 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
<fragment>
टैग का इस्तेमाल करते समय, फ़्रैगमेंट1.2.0-rc04
में रिग्रेशन की समस्या को ठीक किया गया है. इस वजह से, गतिविधि बंद होने के दौरानonViewCreated()
को गलत तरीके से कॉल किया जाता था. (b/146290333)<fragment>
टैग की मदद से जोड़े गए फ़्रैगमेंट का नॉन-कॉन्फ़िग अब ठीक से क्लियर हो जाता है.भले ही, वे कभी-कभी लेआउट में दिखते हों. जैसे, सिर्फ़ आपके लैंडस्केप लेआउट में. इस वजह से, इन फ़्रैगमेंट को अब सही तरीके सेCREATED
में ले जाया जाता है. भले ही, वे आपके लेआउट में न हों. ऐसा इसलिए किया जाता है, ताकि उन्हें इंस्टैंटिएट न किया जाए, लेकिन वे किसी भी लाइफ़साइकल के तरीके से न गुज़रें. (b/145769287)
वर्शन 1.2.0-rc04
18 दिसंबर, 2019
androidx.fragment:fragment:1.2.0-rc04
, androidx.fragment:fragment-ktx:1.2.0-rc04
, और androidx.fragment:fragment-testing:1.2.0-rc04
रिलीज़ किए गए हैं. वर्शन 1.2.0-rc04 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- विज़ुअल से जुड़ी समस्याओं से बचने के लिए,
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
, औरTRANSIT_FRAGMENT_FADE
के ऐनिमेशन में बदलाव किया गया है. (b/145468417)
वर्शन 1.2.0-rc03
4 दिसंबर, 2019
androidx.fragment:fragment:1.2.0-rc03
, androidx.fragment:fragment-ktx:1.2.0-rc03
, और androidx.fragment:fragment-testing:1.2.0-rc03
रिलीज़ किए गए हैं. वर्शन 1.2.0-rc03 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- अनजाने में हुए व्यवहार में बदलाव से जुड़ी समस्या को ठीक किया गया है. इसमें, हटाए गए फ़्रैगमेंट को
findFragmentById()
/findFragmentByTag()
से अब भी वापस लाया जा सकता है, जबकि उनके एग्ज़िट ऐनिमेशन/ट्रांज़िशन चल रहे हैं. (b/143982969, aosp/1167585) - अब पैरंट फ़्रैगमेंट से पहले चाइल्ड फ़्रैगमेंट सही तरीके से बंद हो जाते हैं. ऐसा तब होता है, जब कंटेनिंग ऐक्टिविटी
onSaveInstanceState()
को कॉल करती है. (b/144380645) - छिपे हुए फ़्रैगमेंट को पॉप करने के बाद, व्यू को गलत तरीके से
INVISIBLE
के तौर पर मार्क करने की समस्या को ठीक किया गया है. (b/70793925) - फ़्रैगमेंट के शेयर किए गए एलिमेंट के ट्रांज़िशन अब उन व्यू को हैंडल करते हैं जिन्हें घुमाया गया है, स्केल किया गया है वगैरह. (b/142835261)
दस्तावेज़ से जुड़े अपडेट
setUserVisibleHint()
के बंद होने से जुड़े दस्तावेज़ के बारे में ज़्यादा जानकारी दी गई. (b/143897055)setFragmentFactory()
औरgetFragmentFactory()
के दस्तावेज़ को बेहतर बनाया गया है, ताकि यह बेहतर तरीके से बताया जा सके किFragmentFactory
सेट करने से, चाइल्ड FragmentManager पर भी असर पड़ेगा. (aosp/1170095)
डिपेंडेंसी में बदलाव
- अब फ़्रैगमेंट, Lifecycle
2.2.0-rc03
, Lifecycle ViewModel SavedState1.0.0-rc03
, और Activity1.1.0-rc03
पर निर्भर करते हैं.
वर्शन 1.2.0-rc02
7 नवंबर, 2019
androidx.fragment:fragment:1.2.0-rc02
, androidx.fragment:fragment-ktx:1.2.0-rc02
, और androidx.fragment:fragment-testing:1.2.0-rc02
रिलीज़ किए गए हैं. वर्शन 1.2.0-rc02 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- Kotlin में,
onCreateView()
,onViewCreated()
याonActivityCreated()
सेLiveData
को मॉनिटर करते समयgetViewLifecycleOwner()
का इस्तेमाल करने के लिए LintFix (Fragment1.2.0-rc01
में पेश किया गया) अबgetViewLifecycleOwner()
के बजाय Kotlin प्रॉपर्टी ऐक्सेस सिंटैक्सviewLifecycleOwner
का इस्तेमाल करता है. (aosp/1143821)
वर्शन 1.2.0-rc01
23 अक्टूबर, 2019
androidx.fragment:fragment:1.2.0-rc01
, androidx.fragment:fragment-ktx:1.2.0-rc01
, और androidx.fragment:fragment-testing:1.2.0-rc01
रिलीज़ किए गए हैं. वर्शन 1.2.0-rc01 में ये कमिट शामिल हैं.
नई सुविधाएं
FragmentContainerView
अबandroid:name
के साथ-साथclass
एट्रिब्यूट के साथ भी काम करता है. यह<fragment>
टैग की तरह ही काम करता है. (b/142722242)- एक नई लिंट जांच जोड़ी गई है. इससे यह पक्का किया जाता है कि
onCreateView()
,onViewCreated()
याonActivityCreated()
सेLiveData
को मॉनिटर करते समय,getViewLifecycleOwner()
का इस्तेमाल किया जा रहा हो. (b/137122478)
गड़बड़ियां ठीक की गईं
DialogFragment
परonDismiss
औरonCancel
कॉलबैक अब यह गारंटी देते हैं कि उन्हें पास किया गयाDialogInterface
, शून्य नहीं है. साथ ही, जब उन्हें लागू किया जाता है, तोgetDialog()
शून्य नहीं होता. (b/141974033)FragmentContainerView
अबclass
याandroid:name
से तय किए गए फ़्रैगमेंट को इन्फ़्लेशन के हिस्से के तौर पर जोड़ता है. इससे यह पक्का होता है किfindFragmentById()
औरfindFragmentByTag()
तुरंत काम करें. (b/142520327)- स्टेट सेव होने की वजह से,
FragmentContainerView
में मौजूदIllegalStateException
को ठीक किया गया. (b/142580713) FragmentContainerView
क्लास को अस्पष्ट किए जाने पर,FragmentContainerView
में मौजूदUnsupportedOperationException
को ठीक किया गया है. (b/142657034)
ऐसी समस्याएं जिनके बारे में जानकारी पहले से है
- सिर्फ़
class
याandroid:name
एट्रिब्यूट के ज़रिएFragmentContainerView
पर रेफ़र किए गए फ़्रैगमेंट को ProGuard अपने-आप नहीं रखता है. इसलिए, आपको हर फ़्रैगमेंट क्लास के लिए, मैन्युअल तरीके से कीप नियम जोड़ना होगा. हमने Lint के उस नियम को बंद कर दिया है जिसमेंFragmentContainerView
पर माइग्रेट करने का सुझाव दिया जाता है. ऐसा तब तक किया गया है, जब तकaapt2
के ज़रिए इस समस्या को ठीक नहीं कर दिया जाता. (b/142601969)
वर्शन 1.2.0-beta02
11 अक्टूबर, 2019
androidx.fragment:fragment:1.2.0-beta02
, androidx.fragment:fragment-ktx:1.2.0-beta02
, और androidx.fragment:fragment-testing:1.2.0-beta02
रिलीज़ किए गए हैं. वर्शन 1.2.0-beta02 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- उस समस्या को ठीक किया गया है जिसमें Fragment के
onInflate()
कोFragmentContainerView
से सही एट्रिब्यूट नहीं मिलते थे. इससेNavHostFragment
जैसे मामलों में समस्या आ रही थी. (b/142421837)
वर्शन 1.2.0-beta01
9 अक्टूबर, 2019
androidx.fragment:fragment:1.2.0-beta01
, androidx.fragment:fragment-ktx:1.2.0-beta01
, और androidx.fragment:fragment-testing:1.2.0-beta01
रिलीज़ किए गए हैं. वर्शन 1.2.0-beta01 में ये कमिट शामिल हैं.
नई सुविधाएं
FragmentContainerView
की मदद से, शुरुआती फ़्रैगमेंट जोड़ा जा सकता है. साथ ही,android:name
और वैकल्पिकandroid:tag
एक्सएमएल एट्रिब्यूट के लिए भी सहायता जोड़ी गई है.<fragment>
टैग के उलट,FragmentContainerView
शुरुआती फ़्रैगमेंट जोड़ने के लिए, सामान्यFragmentTransaction
का इस्तेमाल करता है. इससेFragmentContainerView
परFragmentTransaction
की अन्य कार्रवाइयां की जा सकती हैं. साथ ही, लेआउट के लिए View Binding का इस्तेमाल किया जा सकता है. (b/139830628, b/141177981)- Fragments में अब Lint की चेतावनी शामिल है. इससे
<fragment>
कोFragmentContainerView
से बदलने का सुझाव मिलता है. (b/139830056)
गड़बड़ियां ठीक की गईं
androidx.transition
का इस्तेमाल करते समय,ClassCastException
से जुड़ी समस्या ठीक की गई. (b/140680619)- ट्रांज़िशन
1.3.0-beta01
का इस्तेमाल करने पर, फ़्रैगमेंट अबandroidx.transition
ट्रांज़िशन के पूरा होने का इंतज़ार करते हैं. इसके अलावा, फ़्रेमवर्क ट्रांज़िशन और ऐनिमेशन के पूरा होने का इंतज़ार भी करते हैं. इन दोनों को फ़्रैगमेंट1.2.0-alpha03
और फ़्रैगमेंट1.2.0-alpha02
में ठीक किया गया था. इसके बाद ही,onDestroyView()
को भेजा जाता है. (aosp/1119841) - ट्रांज़िशन
1.3.0-beta01
का इस्तेमाल करते समय, फ़्रैगमेंट अब एक ही कंटेनर पर नए ट्रांज़िशन / ऐनिमेशन शुरू करने से पहले,androidx.transition
ट्रांज़िशन को सही तरीके से रद्द कर देते हैं. (aosp/1119841) - एपीआई 17 और इससे पहले के वर्शन में,
FragmentContainerView
का इस्तेमाल करते समय, अपने फ़्रैगमेंट के रूट व्यू परandroidx.transition
ट्रांज़िशन का इस्तेमाल करने से जुड़ी समस्या को ठीक किया गया है. (b/140361893) fragment-testing
आर्टफ़ैक्ट अब AndroidX Test1.2.0
पर निर्भर करता है. इससे Espresso 3.2.0 के नए वर्शन के साथ काम न करने की समस्या ठीक हो गई है. (b/139100149)- FragmentManager में
Log.w
के इस्तेमाल को हटा दिया गया है. (aosp/1126468)
ऐसी समस्याएं जिनके बारे में जानकारी पहले से है
- फ़्रैगमेंट के
onInflate()
कोFragmentContainerView
से सही एट्रिब्यूट नहीं मिलते हैं. इससेNavHostFragment
जैसे मामले टूट जाते हैं. (b/142421837)
वर्शन 1.2.0-alpha04
18 सितंबर, 2019
androidx.fragment:fragment:1.2.0-alpha04
, androidx.fragment-ktx:example:1.2.0-alpha04
, और androidx.fragment:fragment-testing:1.2.0-alpha04
रिलीज़ किए गए हैं. वर्शन 1.2.0-alpha04 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
Fragment
परgetFragmentManager()
औरrequireFragmentManager()
तरीकों को बंद कर दिया गया है. इनकी जगहgetParentFragmentManager()
तरीके का इस्तेमाल किया जा सकता है. यह तरीका, उस नॉन-शून्यFragmentManager
को दिखाता है जिसमें Fragment जोड़ा गया है.isAdded()
का इस्तेमाल करके यह पता लगाया जा सकता है कि इसे कॉल करना सुरक्षित है या नहीं. (b/140574496)- स्टैटिक
FragmentManager.enableDebugLogging
तरीके को बंद कर दिया गया है. FragmentManager अबFragmentManager
टैग के लिएLog.isLoggable()
का पालन करता है. इससे, अपने ऐप्लिकेशन को फिर से कंपाइल किए बिना,DEBUG
याVERBOSE
लॉगिंग को चालू किया जा सकता है. (aosp/1116591)
गड़बड़ियां ठीक की गईं
- अब अन्य फ़्रैगमेंट पर एक्ज़िट ऐनिमेशन के दौरान, फ़्रैगमेंट सही तरीके से बंद हो जाते हैं. (b/140574199)
- उस समस्या को ठीक किया गया है जिसकी वजह से फ़्रैगमेंट,
Activity.findViewById()
को कॉल करते थे. हालांकि, पहले ऐसा नहीं होता था. (aosp/1116431)
वर्शन 1.2.0-alpha03
5 सितंबर, 2019
androidx.fragment:fragment:1.2.0-alpha03
, androidx.fragment:fragment-ktx:1.2.0-alpha03
, और androidx.fragment:fragment-testing:1.2.0-alpha03
रिलीज़ किए गए हैं. इस वर्शन में शामिल कमिट यहां देखे जा सकते हैं.
एपीआई में हुए बदलाव
FragmentContainerView
अबfinal
है. (b/140133091)
गड़बड़ियां ठीक की गईं
FragmentContainerView
अब बैक स्टैक से फ़्रैगमेंट हटाने पर, ड्रॉ करने के क्रम को सही तरीके से उलट देता है. (b/139104187)- उस समस्या को ठीक कर दिया गया है जिसमें एक ही समय पर फ़्रैगमेंट को पॉप करने और नया फ़्रैगमेंट जोड़ने पर, गलत ऐनिमेशन चलता था. (b/111659726)
- अब फ़्रैगमेंट,
onDestroyView()
को भेजने से पहले ट्रांज़िशन के पूरा होने का इंतज़ार करते हैं. Fragment1.2.0-alpha02
में, ऐनिमेशन के पूरा होने का इंतज़ार करने की सुविधा पहले से मौजूद थी. (b/138741697)
वर्शन 1.2.0-alpha02
7 अगस्त, 2019
androidx.fragment:fragment:1.2.0-alpha02
, androidx.fragment:fragment-ktx:1.2.0-alpha02
, और androidx.fragment:fragment-testing:11.2.0-alpha02
रिलीज़ हो गया है. इस वर्शन में शामिल कमिट यहां देखे जा सकते हैं.
नई सुविधाएं
by viewModels()
,by activityViewModels()
,ViewModelProvider
कंस्ट्रक्टर याFragment
के साथViewModelProviders.of()
का इस्तेमाल करते समय, अबSavedStateViewModelFactory
का इस्तेमाल डिफ़ॉल्ट फ़ैक्ट्री के तौर पर किया जाता है. (b/135716331)FragmentTransaction
परsetTransition
के साथTRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
,TRANSIT_FRAGMENT_FADE
का इस्तेमाल करने पर दिखने वाले डिफ़ॉल्ट ऐनिमेशन को अपडेट कर दिया गया है. अब ये ऐनिमेशन, Android 10 डिवाइसों पर ऐक्टिविटी के दौरान इस्तेमाल किए जाने वाले ऐनिमेशन से मेल खाते हैं. (aosp/1012812, aosp/1014730)
एपीआई में हुए बदलाव
FragmentContainerView
को डाइनैमिक तरीके से जोड़े गए फ़्रैगमेंट के लिए, सबसे ज़्यादा सुझाव दिए गए कंटेनर के तौर पर पेश किया गया है. यहFrameLayout
वगैरह की जगह लेता है. ऐसा इसलिए, क्योंकि यह ऐनिमेशन की z-ऑर्डरिंग की समस्याओं को ठीक करता है और फ़्रैगमेंट को विंडो इंसर्ट भेजता है. (b/37036000, aosp/985243, b/136494650)- फ़्रैगमेंट से बढ़ाए गए व्यू से, फ़्रैगमेंट को वापस पाने के लिए स्टैटिक
FragmentManager.findFragment(View)
तरीका जोड़ा गया.fragment-ktx
में Kotlin एक्सटेंशन भी उपलब्ध है. (aosp/1090757) FragmentTransaction
परadd()
औरreplace()
के नए ओवरलोड जोड़े गए हैं. येClass<? extends Fragment>
और आर्ग्युमेंट के वैकल्पिकBundle
लेते हैं. ये तरीके, जोड़ने के लिए Fragment का इंस्टेंस बनाने के लिए, आपकेFragmentFactory
का इस्तेमाल करते हैं.fragment-ktx
में, Kotlin एक्सटेंशन भी जोड़े गए हैं.ये एक्सटेंशन, रीफ़ाइड टाइप (यानी किfragmentTransaction.replace<YourFragment>(R.id.container)
) का इस्तेमाल करते हैं. (b/126124987)Fragment
लाइफ़साइकल कॉलबैक में@MainThread
एनोटेशन जोड़े गए हैं. (b/127272564)FragmentTransaction
औरFragmentManager.BackStackEntry
पर ब्रेडक्रंब के टाइटल से जुड़े एपीआई अब काम नहीं करेंगे. (b/138252944)FragmentTransaction
परsetTransitionStyle
तरीके का इस्तेमाल बंद कर दिया गया है. (aosp/1011537)FragmentManager
में दिए गए कई तरीके अबabstract
नहीं हैं.FragmentManager
खुदabstract
रहता है. इसे सीधे तौर पर इंस्टैंशिएट या बढ़ाया नहीं जाना चाहिए. आपको सिर्फ़getSupportFragmentManager()
,getChildFragmentManager()
वगैरह से मौजूदा इंस्टेंस मिलता रहेगा.
गड़बड़ियां ठीक की गईं
- फ़्रैगमेंट
1.1.0-rc04
से: फ़्रैगमेंट अब उन ट्रांज़िशन को सही तरीके से रद्द करते हैं जिन्हें फ़्रैगमेंट पर पॉप-अप किया गया है. (b/138251858) - फ़्रैगमेंट
1.1.0-rc03
: उस समस्या को ठीक किया गया है जिसमें टाइम आउट की अवधि को एक से ज़्यादा बार कॉल करने पर, पिछली टाइम आउट की अवधियां रद्द नहीं होती थीं.postponeEnterTransition()
(b/137797118) - Fragment
1.1.0-rc02
: मौजूदा आइटम को हटाते समय,FragmentPagerAdapter
औरFragmentStatePagerAdapter
में क्रैश होने की समस्या को ठीक किया गया है. (b/137209870) - अब फ़्रैगमेंट,
onDestroyView()
को डिसपैच करने से पहले ऐनिमेशन के पूरा होने का इंतज़ार करते हैं. (b/136110528) - पैरंट फ़्रैगमेंट को ऐनिमेट करते समय, चाइल्ड फ़्रैगमेंट और उनके डिसेंडेंट के फ़्रैगमेंट ऐनिमेशन को अब सही तरीके से हैंडल किया जाता है. (b/116675313)
- शेयर किए गए एलिमेंट ट्रांज़िशन का इस्तेमाल करते समय, पॉप और ऐड ऑपरेशन को एक साथ इस्तेमाल करने पर होने वाली
NullPointerException
को ठीक किया गया है. (b/120507394) - Robolectric टेस्ट में
FragmentPagerAdapter
औरFragmentStatePagerAdapter
का इस्तेमाल करते समय,IllegalStateException
s के लिए एक समाधान जोड़ा गया. (b/137201343)
वर्शन 1.2.0-alpha01
2 जुलाई, 2019
androidx.fragment:fragment:1.2.0-alpha01
, androidx.fragment:fragment-ktx:1.2.0-alpha01
, और androidx.fragment:fragment-testing:1.2.0-alpha01
रिलीज़ किए गए हैं. इस वर्शन में शामिल कमिट यहां देखे जा सकते हैं.
नई सुविधाएं
- FragmentManager अब Fragment के व्यू को अटैच करने के बाद और
onViewCreated()
को कॉल करने से ठीक पहले,requestApplyInsets()
को कॉल करता है. इससे यह पक्का होता है कि आपके व्यू में हमेशा सही इंसर्ट मौजूद हों. (b/135945162)
गड़बड़ियां ठीक की गईं
replace()
से पहलेsetPrimaryNavigationFragment()
का इस्तेमाल करने वालेFragmentTransaction
को पॉप अप करते समय,NullPointerException
की समस्या को ठीक किया गया. (b/134673465)
वर्शन 1.1.0
वर्शन 1.1.0
5 सितंबर, 2019
androidx.fragment:fragment:1.1.0
, androidx.fragment:fragment-ktx:1.1.0
, और androidx.fragment:fragment-testing:1.1.0
रिलीज़ किए गए हैं. इस वर्शन में शामिल कमिट यहां देखे जा सकते हैं.
1.0.0 के बाद हुए अहम बदलाव
- fragment-testing:
fragment-testing
आर्टफ़ैक्ट, किसी फ़्रैगमेंट को अलग से टेस्ट करने के लिएFragmentScenario
क्लास उपलब्ध कराता है. ज़्यादा जानकारी के लिए, अपने ऐप्लिकेशन के फ़्रैगमेंट की जांच करने से जुड़ा दस्तावेज़ देखें. - FragmentFactory: अब
FragmentManager
परFragmentFactory
सेट किया जा सकता है, ताकि फ़्रैगमेंट इंस्टेंस बनाने की प्रोसेस को मैनेज किया जा सके. इससे, नो-आर्ग्युमेंट कंस्ट्रक्टर की ज़रूरत नहीं पड़ती. - ViewModels के लिए Kotlin प्रॉपर्टी डेलिगेट:
fragment-ktx
आर्टफ़ैक्ट में अब दो Kotlin प्रॉपर्टी डेलिगेट शामिल हैं:by viewModels()
का इस्तेमाल, किसी फ़्रैगमेंट से जुड़े ViewModels को ऐक्सेस करने के लिए किया जाता है. वहीं,by activityViewModels()
का इस्तेमाल, ऐक्टिविटी के स्कोप वाले ViewModels को ऐक्सेस करने के लिए किया जाता है. - ज़्यादा से ज़्यादा लाइफ़साइकल: अब
FragmentTransaction
परsetMaxLifecycle()
को कॉल करके, किसी फ़्रैगमेंट के लिए ज़्यादा से ज़्यादा लाइफ़साइकल की स्थिति सेट की जा सकती है. यह नीति, अब काम न करने वालीsetUserVisibleHint()
नीति की जगह ले लेगी.FragmentPagerAdapter
औरFragmentStatePagerAdapter
में एक नया कंस्ट्रक्टर है. इसकी मदद से, नए तरीके से काम किया जा सकता है. - FragmentActivity LayoutId कंस्ट्रक्टर:
FragmentActivity
की सबक्लास अबFragmentActivity
पर कंस्ट्रक्टर को कॉल कर सकती हैं. यह कंस्ट्रक्टर,R.layout
आईडी लेता है. इससे पता चलता है किonCreate()
मेंsetContentView()
को कॉल करने के बजाय, किस लेआउट को कॉन्टेंट व्यू के तौर पर सेट किया जाना चाहिए. इससे इस ज़रूरी शर्त में कोई बदलाव नहीं होता कि आपकी सबक्लास में नो-आर्ग्युमेंट कंस्ट्रक्टर होना चाहिए. - Fragment LayoutId constructor:
Fragment
की सबक्लास अबFragment
पर मौजूद कंस्ट्रक्टर को कॉल कर सकती हैं. यह कंस्ट्रक्टर,R.layout
आईडी लेता है. इससे पता चलता है किonCreateView()
को बदलने के बजाय, इस फ़्रैगमेंट के लिए किस लेआउट का इस्तेमाल किया जाना चाहिए.onViewCreated()
में जाकर, लेआउट को बड़ा किया जा सकता है. - टाइमआउट के साथ बाद में करें:
postponeEnterTransition()
का नया ओवरलोड जोड़ा गया है, जिसमें टाइमआउट लगता है.
वर्शन 1.1.0-rc04
7 अगस्त, 2019
androidx.fragment:fragment:1.1.0-rc04
, androidx.fragment:fragment-ktx:1.1.0-rc04
, और androidx.fragment:fragment-testing:1.1.0-rc04
रिलीज़ हो गया है. इस वर्शन में शामिल कमिट यहां देखे जा सकते हैं.
गड़बड़ियां ठीक की गईं
- अब फ़्रैगमेंट, फ़्रैगमेंट पर पोस्टपोन किए गए ट्रांज़िशन को सही तरीके से रद्द करते हैं. (b/138251858)
वर्शन 1.1.0-rc03
19 जुलाई, 2019
androidx.fragment:fragment:1.1.0-rc03
, androidx.fragment:fragment-ktx:1.1.0-rc03
, और androidx.fragment:fragment-testing:1.1.0-rc03
रिलीज़ हो गया है. इस वर्शन में शामिल कमिट यहां देखे जा सकते हैं.
गड़बड़ियां ठीक की गईं
- उस समस्या को ठीक किया गया है जिसमें एक से ज़्यादा बार टाइम आउट होने पर,
postponeEnterTransition()
को कॉल करने से पिछले टाइम आउट रद्द नहीं होते थे. (b/137797118)
वर्शन 1.1.0-rc02
17 जुलाई, 2019
androidx.fragment:fragment:1.1.0-rc02
, androidx.fragment:fragment-ktx:1.1.0-rc02
, और androidx.fragment-testing:fragment:1.1.0-rc02
रिलीज़ किए गए हैं. इस वर्शन में शामिल कमिट यहां देखे जा सकते हैं.
गड़बड़ियां ठीक की गईं
FragmentPagerAdapter
औरFragmentStatePagerAdapter
में, मौजूदा आइटम को हटाते समय क्रैश होने की समस्या को ठीक किया गया है. (b/137209870)
वर्शन 1.1.0-rc01
2 जुलाई, 2019
androidx.fragment:fragment:1.1.0-rc01
, androidx.fragment:fragment-ktx:1.1.0-rc01
, और androidx.fragment:fragment-testing:1.1.0-rc01
रिलीज़ किए गए हैं. इस वर्शन में शामिल कमिट यहां देखे जा सकते हैं.
गड़बड़ियां ठीक की गईं
- ट्रांज़िशन के दौरान
show()
याhide()
कार्रवाइयों का इस्तेमाल करने पर, फ़्रैगमेंट अब अपनी दृश्यता को सही तरीके से अपडेट करते हैं. (b/133385058) replace()
से पहलेsetPrimaryNavigationFragment()
का इस्तेमाल करने वालेFragmentTransaction
को पॉप अप करते समय,NullPointerException
की समस्या को ठीक किया गया. (b/134673465)
वर्शन 1.1.0-beta01
5 जून, 2019
androidx.fragment:fragment:1.1.0-beta01
, androidx.fragment:fragment-ktx:1.1.0-beta01
, और androidx.fragment:fragment-testing:1.1.0-beta01
रिलीज़ किए गए हैं. इस वर्शन में शामिल कमिट यहां देखे जा सकते हैं.
गड़बड़ियां ठीक की गईं
- नेस्ट किए गए फ़्रैगमेंट के लिए,
androidx.lifecycle.Lifecycle
कॉलबैक (खास तौर परSTARTED
,RESUMED
,PAUSED
,STOPPED
, औरDESTROYED
से जुड़े) अब सही तरीके से नेस्ट किए गए हैं. (b/133497591) - अब फ़्रैगमेंट के
onCreate()
में रजिस्टर किए गएOnBackPressedCallback
इंस्टेंस, चाइल्ड FragmentManager पर सही तरीके से लागू होते हैं. (b/133175997) - पैरंट फ़्रैगमेंट को बदलने पर, चाइल्ड फ़्रैगमेंट अब ऐनिमेट नहीं होते. (b/121017790)
- अब
animateLayoutChanges="true"
का इस्तेमाल करते समय, फ़्रैगमेंट के ऐनिमेशन और ट्रांज़िशन को अनदेखा किया जाता है. इससे उस समस्या को ठीक किया गया है जिसमें फ़्रैगमेंट सही तरीके से डिस्ट्रॉय नहीं होते थे. (b/116257087)
वर्शन 1.1.0-alpha09
16 मई, 2019
androidx.fragment:fragment:1.1.0-alpha09
, androidx.fragment:fragment-ktx:1.1.0-alpha09
, और androidx.fragment:fragment-testing:1.1.0-alpha09
रिलीज़ किए गए हैं. इस वर्शन में शामिल कमिट यहां देखे जा सकते हैं.
एपीआई में हुए बदलाव
- प्राइमरी नेविगेशन फ़्रैगमेंट में बदलाव होने पर, अब फ़्रैगमेंट को नई
onPrimaryNavigationFragmentChanged(boolean)
विधि के लिए कॉलबैक मिलता है. aosp/960857
गड़बड़ियां ठीक की गईं
- चाइल्ड फ़्रैगमेंट की वजह से बढ़े हुए मेन्यू आइटम अब पैरंट फ़्रैगमेंट को हटाने पर सही तरीके से हटा दिए जाते हैं. b/131581013
वर्शन 1.1.0-alpha08
7 मई, 2019
androidx.fragment:fragment:1.1.0-alpha08
, androidx.fragment:fragment-ktx:1.1.0-alpha08
, और androidx.fragment:fragment-testing:1.1.0-alpha08
रिलीज़ किए गए हैं. इस वर्शन में शामिल कमिट यहां देखे जा सकते हैं.
यह रिलीज़, Preferences 1.1.0-alpha01 से लेकर 1.1.0-alpha04 तक के वर्शन के साथ काम नहीं करती. Fragments के इस वर्शन का इस्तेमाल करते समय, कृपया Preferences 1.1.0-alpha05 पर अपग्रेड करें.
नई सुविधाएं
postponeEnterTransition()
का नया ओवरलोड जोड़ा गया है. यह टाइम आउट लेता है. इसके बाद, फ़्रैगमेंट अपने-आपstartPostponedEnterTransition()
को कॉल करेगा b/120803208
एपीआई में हुए बदलाव
- बदलाव: पहले बंद किए गए
FragmentFactory
instantiate
तरीके को हटा दिया गया है. यह तरीकाBundle
लेता था. aosp/953856 - बदलाव:
FragmentPagerAdapter
औरFragmentStatePagerAdapter
में मौजूदRESUME_ONLY_CURRENT_FRAGMENT
औरUSE_SET_USER_VISIBLE_HINT
कॉन्स्टेंट का नाम बदलकर, क्रमशःBEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
औरBEHAVIOR_SET_USER_VISIBLE_HINT
कर दिया गया है. aosp/954782
गड़बड़ियां ठीक की गईं
setMaxLifecycle()
के ज़रिए जिन फ़्रैगमेंट के लाइफ़साइकल को सीमित किया गया है वे अब अपनी आखिरी स्थिति में पहुंचने से पहले फिर से शुरू नहीं होते. b/131557151setMaxLifecycle(Lifecycle.State.CREATED)
का इस्तेमाल करने पर, फ़्रैगमेंट के व्यू सही तरीके से डिस्ट्रॉय हो जाएंगे. aosp/954180
वर्शन 1.1.0-alpha07
25 अप्रैल, 2019
androidx.fragment:fragment:1.1.0-alpha07
, androidx.fragment:fragment-ktx:1.1.0-alpha07
, और androidx.fragment:fragment-testing:1.1.0-alpha07
रिलीज़ किए गए हैं. इस वर्शन में शामिल कमिट यहां देखे जा सकते हैं.
नई सुविधाएं
- अब
FragmentTransaction
परsetMaxLifecycle()
को कॉल करके, किसी फ़्रैगमेंट के लिए लाइफ़साइकल की ज़्यादा से ज़्यादा स्थिति सेट की जा सकती है. यह नीति, अब काम न करने वालीsetUserVisibleHint()
नीति की जगह ले लेगी.FragmentPagerAdapter
औरFragmentStatePagerAdapter
में एक नया कंस्ट्रक्टर है. इसकी मदद से, नए तरीके से काम किया जा सकता है. (b/129780800)
एपीआई में हुए बदलाव
moveToState(STARTED)
को अब सिर्फ़ एपीआई 24 या उसके बाद के वर्शन वाले डिवाइसों पर कॉल किया जा सकता है.FragmentScenario
(b/129880016)
व्यवहार में बदलाव
- (b/129907905) की वजह से, बैक स्टैक पर मौजूद फ़्रैगमेंट को
onCreateView()
पर कॉलबैक नहीं मिलेगा. ऐसा तब होगा, जब होस्टिंग ऐक्टिविटी को फिर से बनाया जाएगा.onCreateView()
को अब सिर्फ़ तब कॉल किया जाएगा, जब फ़्रैगमेंट दिखने लगेगा. इसका मतलब है कि बैक स्टैक को पॉप किया गया है.
गड़बड़ियां ठीक की गईं
- एक्सएमएल में
<fragment>
टैग औरFragmentActivity
याAppCompatActivity
केcontentLayoutId
कंस्ट्रक्टर का इस्तेमाल करते समय होने वाली समस्या को ठीक किया गया है. (b/129907905) - हमने उस समस्या को ठीक किया है जिसमें कॉन्फ़िगरेशन में बदलाव के बाद, बैक स्टैक पर मौजूद फ़्रैगमेंट को कम से कम
CREATED
पर नहीं ले जाया जाता था. इस वजह से, ViewModels और चाइल्ड रिटेन फ़्रैगमेंट को ठीक से हटाया नहीं जाता था. (b/129593351) - इंस्टेंस की स्थिति सेव होने के बाद, बनाए रखे गए फ़्रैगमेंट के डिसिंक होने की वजह से,
restoreSaveState
में क्रैश होने की समस्या को ठीक किया गया है. (b/130433793) (aosp/947824) - उन समस्याओं को ठीक किया गया है जिनमें फ़्रैगमेंट लाइफ़साइकल के साथ जोड़े गए
OnBackPressedCallback
को तब कॉल नहीं किया जाता था, जबFragmentManager
में बैक स्टैक होता था. ज़्यादा जानकारी के लिए, androidx.activity 1.0.0-alpha07 देखें. (aosp/948209) - फ़्रैगमेंट अब ऐनिमेशन के लिए,
LAYER_TYPE_HARDWARE
लागू नहीं करते. अगर आपको खास तौर पर हार्डवेयर लेयर वाला ऐनिमेशन चाहिए, तो कृपया इसे अपने ऐनिमेशन के हिस्से के तौर पर सेट करें. (b/129486478)
वर्शन 1.1.0-alpha06
3 अप्रैल, 2019
androidx.fragment:fragment:1.1.0-alpha06
, androidx.fragment:fragment-ktx:1.1.0-alpha06
, और androidx.fragment:fragment-testing:1.1.0-alpha06
रिलीज़ किए गए हैं. इस वर्शन में शामिल कमिट यहां देखे जा सकते हैं.
नई सुविधाएं
- FragmentManager से थ्रो किए गए अपवादों में, अब मैसेज में फ़्रैगमेंट का नाम शामिल होता है. (b/67759402)
एपीआई में हुए बदलाव
Fragment
औरFragmentActivity
में अब एक दूसरा कंस्ट्रक्टर शामिल है, जो@LayoutRes int
लेता है. यह आपकी क्लास को@ContentView
से एनोटेट करने के पिछले तरीके की जगह लेता है. यह तरीका, ऐप्लिकेशन और लाइब्रेरी मॉड्यूल, दोनों में काम करता है. (b/128352521)- FragmentActivity के
onActivityResult()
को अब@CallSuper
के तौर पर सही तरीके से मार्क किया गया है. (b/127971684) - FragmentFactory का
instantiate
तरीका, Bundle आर्ग्युमेंट लेता है. इसे अब इस्तेमाल नहीं किया जा सकता. ऐप्लिकेशन कोinstantiate
के नए ओवरलोड का इस्तेमाल करना चाहिए, जो Bundle नहीं लेता. (b/128836103) FragmentScenario
तरीकों को अब@StyleRes
के साथ सही तरीके से एनोटेट किया गया है. (aosp/924193)FragmentTabHost
का अब इस्तेमाल नहीं किया जा सकता. (b/127971835)- FragmentActivity के
getThemedContext()
को हटा दिया गया है. (aosp/934078)
गड़बड़ियां ठीक की गईं
- 1.1.0-alpha05 वर्शन में हुई एक समस्या को ठीक किया गया है. इस समस्या की वजह से, स्क्रीन पर आने वाला फ़्रैगमेंट फ़्लैश होता था. (b/129405432)
- उस समस्या को ठीक किया गया है जिसमें popBackStack+replace+popBackStack कार्रवाइयों की सीरीज़ के बाद, प्राइमरी नेविगेशन फ़्रैगमेंट गायब हो जाता था. (b/124332597)
- फ़्रैगमेंट की स्थिति को वापस लाते समय, आपकी गतिविधि पर
@ContentView
कंस्ट्रक्टर का इस्तेमाल करने से जुड़ी समस्या को ठीक किया गया है. (b/127313094) - जब किसी मौजूदा टारगेट फ़्रैगमेंट को ऐसे फ़्रैगमेंट से बदला जाता है जो अब तक FragmentManager से अटैच नहीं हुआ है, तब
setTargetFragment()
के लॉजिक को ठीक किया गया है. (aosp/932156)
वर्शन 1.1.0-alpha05
13 मार्च, 2019
androidx.fragment:fragment:1.1.0-alpha05
, androidx.fragment:fragment-ktx:1.1.0-alpha05
, और androidx.fragment:fragment-testing:1.1.0-alpha05
रिलीज़ किए गए हैं. इस वर्शन में शामिल सभी कमिट की पूरी सूची यहां देखी जा सकती है.
नई सुविधाएं
@ContentView
एनोटेशन लुकअप अब कैश मेमोरी में सेव किए जाते हैं (b/123709449)
व्यवहार में बदलाव
- अब
remove()
,hide()
,show()
,detach()
, औरsetPrimaryNavigationFragment()
को कॉल करने पर,IllegalStateException
दिखता है. ऐसा तब होता है, जब किसी फ़्रैगमेंट को किसी दूसरे FragmentManager से अटैच किया जाता है. पहले ऐसा होने पर, कोई सूचना नहीं मिलती थी (aosp/904301)
गड़बड़ियां ठीक की गईं
FragmentActivity
के लिएonNewIntent
को अब@CallSuper
(b/124120586) के तौर पर सही तरीके से मार्क किया गया है- उस समस्या को ठीक किया गया है जिसमें
getDialog().dismiss()
याgetDialog().cancel()
का इस्तेमाल करते समय,DialogFragment
केonDismiss()
को दो बार कॉल किया जा सकता था (b/126563750)
वर्शन 1.1.0-alpha04
7 फ़रवरी, 2019
androidx.fragment:fragment 1.1.0-alpha04
, androidx.fragment:fragment-ktx 1.1.0-alpha04
, और androidx.fragment:fragment-testing 1.1.0-alpha04
रिलीज़ किए गए हैं.
नई सुविधाएं
@ContentView
क्लास के एनोटेशन के लिए सहायता जोड़ी गई है. इससे यह पता चलता है किonCreateView()
को ओवरराइड करने के बजाय, किस लेआउट एक्सएमएल फ़ाइल को बड़ा किया जाना चाहिए. हमारा सुझाव है कि व्यू से जुड़ा कामonViewCreated()
में किया जाए. (aosp/837619)fragment-testing
अबandroidx.test:core-ktx
1.1.0 स्टेबल (b/121209673) पर निर्भर करता है- अब
FragmentScenario
के साथopenActionBarOverflowOrOptionsMenu
का इस्तेमाल करके, फ़्रैगमेंट होस्ट किए गए विकल्प मेन्यू (b/121126668) की जांच की जा सकती है
एपीआई में हुए बदलाव
requireArguments()
तरीका जोड़ा गया है. यह@NonNull Bundle
दिखाता है याIllegalStateException
(b/121196360) दिखाता है- यह नोट जोड़ा गया है कि
getLifecycle()
,getViewLifecycleOwner()
, औरgetViewLifecycleOwnerLiveData()
को बदला नहीं जाना चाहिए. साथ ही, आने वाले समय में रिलीज़ होने वाले वर्शन में इन्हें फ़ाइनल कर दिया जाएगा. अगर फ़िलहाल इस तरीके को बदला जा रहा है, तो कृपया सुविधा के लिए अनुरोध सबमिट करें. (aosp/880714) - यह नोट जोड़ा गया है कि
getViewModelStore()
को बदला नहीं जाना चाहिए. साथ ही, इसे आने वाले समय में रिलीज़ होने वाले वर्शन में फ़ाइनल कर दिया जाएगा. अगर फ़िलहाल इस तरीके को बदला जा रहा है, तो कृपया सुविधा के लिए अनुरोध सबमिट करें. (aosp/880713) - Fragments की पिछली रिलीज़ के साथ बाइनरी कंपैटिबिलिटी से जुड़ी समस्या ठीक की गई. (aosp/887877) (aosp/889834)
गड़बड़ियां ठीक की गईं
null
कोsetTargetFragment()
पर पास करने पर, टारगेट फ़्रैगमेंट सही तरीके से हटा दिए जाते हैं. (aosp/849969)- उस समस्या को ठीक किया गया है जिसमें टारगेट फ़्रैगमेंट, कभी-कभी
onDestroy()
में या उसके बाद उपलब्ध नहीं होते थे. (b/122312935) - DialogFragment के onDismiss() को अब
onDestroy()
से पहले कॉल किया जाता है. (aosp/874133) (aosp/890734)
वर्शन 1.1.0-alpha03
17 दिसंबर, 2018
नई सुविधाएं
- फ़्रैगमेंट अब
BundleSavedStateRegistryOwner
को लागू करता है और हाल ही में रिलीज़ हुई SavedState लाइब्रेरी पर निर्भर करता है [aosp/824380] by activityViewModels
Kotlin प्रॉपर्टी डेलिगेट को जोड़ा गया है, ताकि कंटेनिंग ऐक्टिविटी से जुड़े ViewModels को वापस पाया जा सके [b/119050253]by viewModels
Kotlin प्रॉपर्टी डेलिगेट को बड़ा कर दिया गया है, ताकिViewModelStoreOwner
पाने के लिए, वैकल्पिक लैम्डा तरीके का इस्तेमाल किया जा सके. इससे, पैरंट फ़्रैगमेंट या अन्य कस्टमViewModelStoreOwner
कोval viewModel: MyViewModel by viewModels(::requireParentFragment)
जैसे कोड के साथ पास किया जा सकता है [b/119050253]
एपीआई में हुए बदलाव
FragmentScenario
की मदद से, अबTheme.AppCompat
[b/119054431] जैसी थीम तय की जा सकती है. यह एक ऐसा बदलाव है जिससे मौजूदा सिस्टम पर असर पड़ सकता है.requireView()
तरीका जोड़ा गया है. यह@NonNull View
दिखाता है याIllegalStateException
दिखाता है [b/120241368]requireParentFragment()
तरीका जोड़ा गया है, जो@NonNull Fragment
दिखाता है याIllegalStateException
दिखाता है [b/112103783]
गड़बड़ियां ठीक की गईं
- IllegalStateException को ठीक किया गया: स्थिति को सेव नहीं किया जा सका b/120814739
- सेव की गई इंस्टेंस की स्थिति से वापस लाए जा रहे फ़्रैगमेंट को अब हमेशा गैर-शून्य
Bundle
मिलेगा [b/119794496] - हटाए गए फ़्रैगमेंट को फिर से जोड़ने पर, वे अपने
Lifecycle
ऑब्जेक्ट का फिर से इस्तेमाल नहीं करते [b/118880674]
वर्शन 1.1.0-alpha02
3 दिसंबर, 2018
नई सुविधाएं
- FragmentScenario के Kotlin एक्सटेंशन की मदद से, अब फ़्रैगमेंट बनाने के लिए लैंबडा का इस्तेमाल किया जा सकता है. इसके लिए, आपको
FragmentFactory
इंस्टेंस पास करने की ज़रूरत नहीं होगी. (aosp/812913)
गड़बड़ियां ठीक की गईं
- पिछली ऐक्टिविटी में नेस्ट किए गए फ़्रैगमेंट का इस्तेमाल करते समय, IllegalStateException को ठीक किया गया (b/119256498)
FragmentFactory
के साथFragmentScenario.recreate()
का इस्तेमाल करते समय क्रैश होने की समस्या ठीक की गई (aosp/820540)- उस समस्या को ठीक किया गया है जिसकी वजह से फ़्रैगमेंट हटाने के बाद, टारगेट फ़्रैगमेंट ऐक्सेस नहीं किए जा सकते थे (aosp/807634)
वर्शन 1.1.0-alpha01
5 नवंबर, 2018
यह fragment-testing
आर्टफ़ैक्ट और FragmentScenario
का पहला वर्शन है. इसे androidx.test:core API के आधार पर बनाया गया है. ज़्यादा जानकारी के लिए, फ़्रैगमेंट टेस्टिंग का दस्तावेज़ देखें.
नई सुविधाएं
- अलग-अलग फ़्रैगमेंट की जांच करने के लिए, नई FragmentScenario क्लास.
- अब किसी भी
FragmentManager
परFragmentFactory
सेट किया जा सकता है, ताकि यह कंट्रोल किया जा सके कि नए Fragment इंस्टेंस कैसे इंस्टैंशिएट किए जाते हैं. - किसी फ़्रैगमेंट से ViewModels को वापस पाने के लिए, एक नया
by viewModels()
Kotlin प्रॉपर्टी डेलिगेट जोड़ा गया है. - इनपुट इवेंट (जैसे कि क्लिक) के पूरे न होने पर, अब उन्हें फ़्रैगमेंट के
onStop()
में रद्द कर दिया जाता है.
एपीआई में हुए बदलाव
- Fragment API के सभी सर्फ़ेस पर, nullability एनोटेशन को काफ़ी हद तक बढ़ाया गया है.
गड़बड़ियां ठीक की गईं
- उस समस्या को ठीक किया गया है जिसकी वजह से LiveData में फ़्रैगमेंट ऑपरेशन पूरे नहीं हो पाते थे (b/77944637)
ऐसी समस्याएं जिनके बारे में जानकारी पहले से है
- FragmentManager से किसी फ़्रैगमेंट को हटाने के बाद, टारगेट फ़्रैगमेंट को ऐक्सेस नहीं किया जा सकता.
fragment-testing
, सहीandroidx.test:core:1.0.0
के बजायandroidx.test:core:1.0.0-beta01
पर निर्भर करता है.