फ़्रैगमेंट
| नया अपडेट | स्टेबल रिलीज़ | रिलीज़ कैंडिडेट | बीटा रिलीज़ | ऐल्फ़ा रिलीज़ |
|---|---|---|---|---|
| 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आर्टफ़ैक्ट में अबAndroidFragmentComposableशामिल है. इसकी मदद से, फ़्रैगमेंट क्लास के नाम का इस्तेमाल करके, 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 में ये बदलाव शामिल हैं.
नई सुविधाएं
- नए
AndroidFragmentComposableकी मदद से, फ़्रैगमेंट क्लास के नाम का इस्तेमाल करके, कंपोज़ हेरारकी में फ़्रैगमेंट जोड़े जा सकते हैं. यह फ़्रैगमेंट की स्थिति को सेव करने और वापस लाने की प्रोसेस को अपने-आप मैनेज करता है. इसका इस्तेमाल, AndroidViewBindingComposable.(b/312895363, Icf841) के विकल्प के तौर पर किया जा सकता है
दस्तावेज़ में बदलाव
OnBackStackChangedListenerएपीआई के लिए दस्तावेज़ अपडेट किए गए हैं. इनमें बताया गया है कि इन्हें कब कॉल किया जाता है और इनका इस्तेमाल कैसे किया जाना चाहिए. (I0bfd9)
डिपेंडेंसी अपडेट
- Fragment अब Profile Installer 1.3.1 पर निर्भर करता है.
वर्शन 1.7
वर्शन 1.7.1
14 मई, 2024
androidx.fragment:fragment-*:1.7.1 रिलीज़ हो गया है. वर्शन 1.7.1 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- पीछे जाने पर झलक दिखाने वाला हाथ का जेस्चर की सुविधा अब सिर्फ़ उन लेन-देन के लिए काम करेगी जिनमें सभी फ़्रैगमेंट में, Animator या Seekable Androidx ट्रांज़िशन मौजूद हो. इस अपडेट में, उस समस्या को ठीक किया गया है जिसमें कुछ हद तक आगे-पीछे किए जा सकने वाले लेन-देन को रद्द करने पर, स्क्रीन खाली हो जाती थी. (I43037, b/339169168)
वर्शन 1.7.0
1 मई, 2024
androidx.fragment:fragment-*:1.7.0 रिलीज़ हो गया है. वर्शन 1.7.0 में ये बदलाव शामिल हैं.
पीछे जाने पर झलक दिखाने वाले हाथ के जेस्चर की सुविधा
Animatorया AndroidX Transition 1.5.0 का इस्तेमाल करने पर, फ़्रैगमेंट अब ऐप्लिकेशन में पीछे जाने पर झलक दिखाने वाली सुविधा के साथ काम करते हैं. इससे उपयोगकर्ता, वापस जाने के लिए किए जाने वाले जेस्चर का इस्तेमाल करके, पिछले फ़्रैगमेंट को देख सकते हैं. इसके लिए, उन्हें Animator/Transition की मदद लेनी होगी. इसके बाद, वे जेस्चर पूरा करके लेन-देन को पूरा करने या रद्द करने का फ़ैसला ले सकते हैं.
| ट्रांज़िशन सिस्टम | एक्सएमएल संसाधन | पीछे जाने पर झलक दिखाने वाले हाथ के जेस्चर की सुविधा काम करती है |
|---|---|---|
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 में ये बदलाव शामिल हैं.
डिपेंडेंसी अपडेट
- Fragment अब 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 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- फ़्रैगमेंट की पिछली रिलीज़ में, एक जानी-पहचानी समस्या को ठीक किया गया है. इसमें
Animatorया AndroidX ट्रांज़िशन के लिए, फ़्रैगमेंट की पीछे जाने पर झलक दिखाने वाली सुविधा का इस्तेमाल करने पर, फ़्रैगमेंटhandleOnBackProgressedसेNullPointerExceptionदिखाएंगे. ऐसा तब होगा, जबaddOnBackStackChangedListenerके ज़रिए कोईFragmentManager.OnBackStackChangedListenerकभी नहीं जोड़ा गया हो. (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नहीं जोड़ा गया है, तो Fragment,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में जोड़े गए नएanimateToStartAPI पर निर्भर करता है.
वर्शन 1.7.0-alpha05
20 सितंबर, 2023
androidx.fragment:fragment-*:1.7.0-alpha05 रिलीज़ हो गया है. वर्शन 1.7.0-alpha05 में ये बदलाव शामिल हैं.
नई सुविधाएं
- AndroidX ट्रांज़िशन का इस्तेमाल करते समय, फ़्रैगमेंट अब पीछे जाने पर झलक दिखाने वाले हाथ के जेस्चर की सुविधा के साथ काम करते हैं. इससे, पीछे जाने के जेस्चर का इस्तेमाल करके, पिछले फ़्रैगमेंट पर वापस जाया जा सकता है. इसके लिए, आपको AndroidX ट्रांज़िशन का इस्तेमाल करना होगा. इसके बाद, आपको यह तय करना होगा कि जेस्चर पूरा होने पर ट्रांज़ैक्शन को पूरा करना है या रद्द करना है. इस सुविधा को चालू करने के लिए, आपको Transition
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)OnBackStackChangedListeneronBackStackChangeStartedऔर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: इस वर्शन में, उस समस्या को ठीक किया गया है जिसमेंsetFragmentResultListenerके अंदरclearFragmentResultListenerको कॉल करने पर, यह काम नहीं करता था. ऐसा तब होता था, जबLifecycleपहले से हीSTARTEDहो और कोई नतीजा पहले से ही उपलब्ध हो. (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)
व्यवहार में बदलाव
- अब फ़्रैगमेंट,
onAttach()से पहले अपनीSavedStateRegistryस्थिति को वापस लाते हैं. इससे यह पक्का होता है कि यह सभी अपवर्ड लाइफ़साइकल के तरीकों से उपलब्ध है. (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 के साथ बंडल किए गए lint वर्शन का इस्तेमाल करने पर, lint क्रैश हो जाता था. (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) - अब फ़्रैगमेंट लाइब्रेरी, ऐक्टिविटी
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()से मिले डिफ़ॉल्ट डायलॉग के तौर पर, ऐक्टिविटी1.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को मेन्यू उपलब्ध कराने के लिए, Fragment API का इस्तेमाल अब नहीं किया जा सकता. ऐसा इसलिए, क्योंकि ये आपकी गतिविधि के साथ आपके फ़्रैगमेंट को जोड़ते हैं और इन्हें अलग से टेस्ट नहीं किया जा सकता. गतिविधि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)
गड़बड़ियां ठीक की गईं
- फ़्रैगमेंट
1.4.1से: जब एक्सएमएल से जनरेट किए गए व्यू आईडी की वैल्यू नेगेटिव होती हैं, तबFragmentContainerViewअब इल्लीगल स्टेट एक्सेप्शन नहीं दिखाता. (Ic185b, b/213086140) - फ़्रैगमेंट
1.4.1से:by viewModels()lazy फ़ंक्शन के साथ कस्टमownerProducerलैम्डा का इस्तेमाल करने पर, अगर कस्टमViewModelProvider.Factoryनहीं दिया जाता है, तो यह हमेशा फ़्रैगमेंट के फ़ैक्ट्री का इस्तेमाल करने के बजाय, उस मालिक सेdefaultViewModelProviderFactoryका इस्तेमाल करेगा. (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लैम्डा का इस्तेमाल करने पर, अब यह हमेशा फ़्रैगमेंट के फ़ैक्ट्री का इस्तेमाल करने के बजाय, उस मालिक सेdefaultViewModelProviderFactoryका इस्तेमाल करेगा. ऐसा तब होगा, जब कस्टमViewModelProvider.Factoryउपलब्ध नहीं कराया गया हो. (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का आईडी होता है, लेकिन कॉल को चेन करने की अनुमति होती है.val navController = binding.container.getFragment<NavHostFragment>().navControllerFragmentScenarioअब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). ये एपीआई, addToBackStack() की तरह ही name का इस्तेमाल करते हैं. इससे FragmentTransaction की स्थिति और उन लेन-देन में जोड़े गए हर फ़्रैगमेंट की स्थिति को सेव किया जा सकता है. साथ ही, बाद में उन लेन-देन और उनके फ़्रैगमेंट को उनकी स्थिति के साथ वापस लाया जा सकता है. इससे, मौजूदा बैक स्टैक को सेव करके और सेव किए गए बैक स्टैक को वापस लाकर, कई बैक स्टैक के बीच आसानी से ‘स्वैप’ किया जा सकता है.
saveBackStack(), popBackStack() की तरह ही काम करता है. यह एसिंक्रोनस होता है. साथ ही, इससे उस नाम के सभी फ़्रैगमेंट ट्रांज़ैक्शन वापस आ जाते हैं. साथ ही, जोड़े गए सभी फ़्रैगमेंट मिट जाते हैं और हट जाते हैं. हालांकि, यह कुछ अहम मामलों में अलग होता है:
saveBackStack()हमेशा शामिल होता है.popBackStack()के उलट, अगर बैक स्टैक में तय किया गया नाम नहीं मिलता है या शून्य नाम दिया जाता है, तो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 में ये बदलाव शामिल हैं.
लिंट
FragmentTransactionमें एक हीFragmentपरdetach()औरattach(), दोनों को कॉल करने का पता लगाने के लिएDetachAndAttachFragmentInSameFragmentTransactionलिंट चेतावनी जोड़ी गई है. ऐसा इसलिए, क्योंकि एक ही लेन-देन में ये दोनों कार्रवाइयां एक-दूसरे को रद्द कर देती हैं. इसलिए, इन्हें अलग-अलग लेन-देन में बांटना ज़रूरी है, ताकि ये कार्रवाइयां सही तरीके से हो सकें. (aosp/1832956, b/200867930)MenuHostकेaddMenuProviderएपीआई का इस्तेमाल करते समय, फ़्रैगमेंट लाइफ़साइकल के इस्तेमाल को फ़्रैगमेंट व्यू लाइफ़साइकल में बदलने के लिए,FragmentAddMenuProviderलिंट की गड़बड़ी जोड़ी गई है. (aosp/1830457, b/200326272)
दस्तावेज़ से जुड़े अपडेट
- Activity Result APIs के ज़रिए मैनेज किए जाने वाले एपीआई के लिए, बंद होने की सूचना देने वाले मैसेज में ज़्यादा जानकारी जोड़ी गई है. ये एपीआई हैं:
startActivityForResult,startIntentSenderForResult,onActivityResult,requestPermissions, औरonRequestPermissionsResult. (cce80f) onActivityCreated()औरDialogFragment, दोनों के लिएonActivityCreated()को बंद करने से जुड़ी सूचना में ज़्यादा जानकारी शामिल की गई है.Fragment(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के ज़रिए पहले सेव की गई स्थिति की कॉपी कोFragmentManagerतब तक सेव रखता था, जब तक कि वह स्थिति वापस नहीं आ जाती थी. इस समस्या को ठीक कर दिया गया है.saveBackStack()(Ied212)show(FragmentTransaction, String)तरीके से DialogFragment को खास तौर पर जोड़ने पर, स्थिति सेव होने के बाद इसे कॉल करने पर,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का इस्तेमाल करता है.saveAllState()औरrestoreSavedState()तरीकों को भीFragmentControllerमें बंद कर दिया गया है. अगर आपकोFragmentActivityके बाहर फ़्रैगमेंट होस्ट करने के लिएFragmentControllerका इस्तेमाल करना है, तो आपकोFragmentHostCallbacksमेंSavedStateRegistryOwnerको लागू करना होगा. (Iba68e, b/188734238)
गड़बड़ियां ठीक की गईं
- एक समस्या को ठीक किया गया है. इसमें कई बैक स्टैक के साथ काम करने के लिए,
saveBackStack()को कॉल करने पर गड़बड़ी होती थी. ऐसा तब होता था, जबFragmentTransactionकोreplace()का इस्तेमाल करके चलाया जाता था. (I73137) - हमने एक
NullPointerExceptionठीक किया है. यह तब होता था, जबrestoreBackStack()API का इस्तेमाल करके, एक से ज़्यादा बैक स्टैक की सुविधा के लिए, सेव किए गए बैक स्टैक को मैन्युअल तरीके से वापस लाया जाता था. इस बैक स्टैक में कई लेन-देन शामिल होते थे. इस अपडेट से, एक समस्या भी ठीक हुई है. इस समस्या की वजह से, सभी लेन-देन के लिए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)
गड़बड़ियां ठीक की गईं
- Fragment
1.3.5से: शेयर किए गए एलिमेंट के ट्रांज़िशन में हुई रिग्रेशन की समस्या को ठीक किया गया है. यह समस्या Fragment1.3.4में aosp/1679887 की वजह से हुई थी. अब फ़्रैगमेंट, ट्रांज़िशन ग्रुप को सही तरीके से हैंडल करते हैं. इन्हें सीधे तौर पर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)FragmentStrictModeViolationक्लास को बड़ा कर दिया गया है, ताकि हर उल्लंघन के आधार पर स्ट्रक्चर की जानकारी जोड़ी जा सके. इससे आपको यह पुष्टि करने में मदद मिलती है कि किस वजह से उल्लंघन हुआ है. साथ ही, उल्लंघन करने वाले फ़्रैगमेंट (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का आईडी होता है. हालांकि, इससे कॉल को चेन किया जा सकता है. (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). ये एपीआई, addToBackStack() की तरह ही name का इस्तेमाल करते हैं. इससे FragmentTransaction की स्थिति और उन लेन-देन में जोड़े गए हर फ़्रैगमेंट की स्थिति को सेव किया जा सकता है. साथ ही, बाद में उन लेन-देन और उनके फ़्रैगमेंट को उनकी स्थिति के साथ वापस लाया जा सकता है. इससे, मौजूदा बैक स्टैक को सेव करके और सेव किए गए बैक स्टैक को वापस लाकर, कई बैक स्टैक के बीच आसानी से ‘स्वैप’ किया जा सकता है.
saveBackStack(), popBackStack() की तरह ही काम करता है. यह एसिंक्रोनस होता है. साथ ही, इससे उस नाम के सभी फ़्रैगमेंट ट्रांज़ैक्शन वापस आ जाते हैं. साथ ही, जोड़े गए सभी फ़्रैगमेंट मिट जाते हैं और हट जाते हैं. हालांकि, यह कुछ अहम मामलों में अलग होता है:
saveBackStack()हमेशा शामिल होता है.popBackStack()के उलट, अगर बैक स्टैक में तय किया गया नाम नहीं मिलता है या शून्य नाम दिया जाता है, तो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()से यह पता चलता है कि आपने बंद किए जा चुकेsetTargetFragment(),getTargetFragment()याgetTargetRequestCode()एपीआई का इस्तेमाल किया है. (#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()को बदल देता है. जैसे, Hilt का इस्तेमाल करते समय@AndroidEntryPointएनोटेट किए गए फ़्रैगमेंट ऐसा करते हैं. अगर आपने उस तरीके को नहीं बदला है, तो एक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)
बाहरी योगदान
Closeableको लागू करने के लिएFragmentScenarioबनाने के लिए, simonschiller को धन्यवाद. (#121, b/143774122)- इस रिलीज़ के लिए,
FragmentStrictModeAPI के सभी फ़ंक्शन जोड़ने के लिए धन्यवाद, simonschiller! (#123, #131, #150, b/143774122, #142, b/153738653, #141, b/153738235, #146, b/181137036, #140, b/153737954, #136, b/153738974, #139, b/153737745) UseGetLayoutInflaterLint check जोड़ने के लिए, tatocaster को धन्यवाद. (#156, b/170781346)DialogFragmentCallbacksDetectorLint 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) - अब फ़्रैगमेंट का व्यू,
hide()का इस्तेमाल करते समयGONEपर सही तरीके से सेट हो जाता है. ऐसा तब होता है, जब रूट व्यू मेंtransitionGroup=”true”सेट हो. (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 का इस्तेमाल करते समय, Fragment
1.3.3में हुई रिग्रेशन की समस्या को ठीक किया गया है. यह समस्या,ViewTreeViewModelStoreOwner.get()एपीआई कोViewModelProviderया Fragment मेंviewModel()की Jetpack Compose विधि के साथ इस्तेमाल करते समय हुई थी. इन इस्तेमाल के उदाहरणों में अब आपके फ़्रैगमेंट से मिले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का इस्तेमाल अब तब काम करता है, जब इसेSavedStateRegistryOwnerके साथ इस्तेमाल किया जाता है.SavedStateRegistryOwner, Fragment के View के साथViewTreeSavedStateRegistryOwner.get()का इस्तेमाल करके वापस लाया जाता है. (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) की वजह से फ़्रैगमेंट में मेमोरी लीक होने की समस्या ठीक की गई- लेन-देन दिखाने/छिपाने की सुविधा का इस्तेमाल करते समय, फ़्रैगमेंट अब
onCreateOptionsMenuको सही तरीके से कॉल करते हैं (I8bce8, b/180255554) - अब ट्रांज़िशन वाले चाइल्ड फ़्रैगमेंट, फ़्रैगमेंट के लेआउट से पहले ही सही तरीके से पहुंच जाएंगे
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जोड़ा गया है. इससेFragmentOnAttachListenerको अलग-अलग, टेस्ट किए जा सकने वाले लिसनर को सौंपा जा सकता है. साथ ही, सीधे तौर पर चाइल्ड फ़्रैगमेंट मैनेजर के अलावा, अन्य फ़्रैगमेंट मैनेजर में लिसनर जोड़ने की सुविधा भी मिलती है.onAttachFragment()FragmentScenarioमें सुधार:fragment-testingआर्टफ़ैक्ट कीFragmentScenarioक्लास को Kotlin में फिर से लिखा गया है. साथ ही, इसमें कई सुधार किए गए हैं:FragmentScenarioअबmoveToState()को लागू करने के लिएsetMaxLifecycle()का इस्तेमाल करता है. इससे यह पक्का होता है कि सभी एपीआई लेवल पर एक जैसा व्यवहार हो. साथ ही, फ़्रैगमेंट की स्थिति को ऐक्टिविटी से अलग किया जा सकता है.FragmentScenarioअब शुरुआतीLifecycle.Stateसेट करने की सुविधा देता है, ताकि हरLifecycle.Stateपर पहली बार जाने से पहले फ़्रैगमेंट की स्थिति की पुष्टि की जा सके.- अब
onFragmentकेFragmentScenarioएपीआई का एक विकल्प उपलब्ध है. यह Kotlin के रीफ़ाइड एक्सटेंशन मेथडwithFragmentके तौर पर उपलब्ध है. इससे वैल्यू वापस की जा सकती है. खास तौर पर, यह दिए गए ब्लॉक में मिले अपवादों को फिर से थ्रो करता है.
ViewTreeसपोर्ट:FragmentअबViewTreeLifecycleOwner.get(View),ViewTreeViewModelStoreOwner.get(View), औरViewTreeSavedStateRegistryOwnerएपीआई के साथ काम करता है. इन एपीआई को लाइफ़साइकल2.3.0और SavedState1.1.0में जोड़ा गया है. इससेFragment, फ़्रैगमेंट कोViewModelStoreOwnerके तौर पर दिखाएगा. साथ ही, फ़्रैगमेंट के व्यू लाइफ़साइकल से जुड़ेSavedStateRegistryOwnerऔरLifecycleOwnerको दिखाएगा. ऐसा तब होगा, जबFragmentमेंViewका इस्तेमाल किया जाएगा.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)
स्टेट मैनेजर की नई सुविधा से जुड़ी गड़बड़ियां ठीक की गईं
FragmentContainerViewमेंAnimationवाला फ़्रैगमेंट जोड़ने पर, लीक और विज़ुअल आर्टफ़ैक्ट की समस्या ठीक की गई. इसके बाद, पॉप ऑपरेशन से उस फ़्रैगमेंट को जोड़ने की प्रोसेस को रोका गया. (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 में बदल दिया गया है. साथ ही,FragmentActionके लिए Kotlin 1.4 के फ़ंक्शनल इंटरफ़ेस का इस्तेमाल करके, सोर्स और बाइनरी के साथ काम करने की सुविधा को बनाए रखा गया है. (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) - अब
onCreate()के बादregisterForActivityResult()को कॉल करने पर, एक अपवाद दिखता है. इससे पता चलता है कि इसकी अनुमति नहीं है. कॉन्फ़िगरेशन में बदलाव के बाद, नतीजे नहीं मिलने पर यह अपवाद दिखता है. (b/162255449) FragmentActivityअबFragmentManagerकी स्थिति को वापस लाने के लिए, Activity1.2.0-alpha08में पेश किए गएOnContextAvailableListenerएपीआई का इस्तेमाल करता है.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लिंट चेक,?.और!!ऑपरेटर के चेन किए गए इस्तेमाल को सही तरीके से हैंडल नहीं करता था. (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क्लास परFragmentLiveDataObserveLint नियम बंद कर दिया गया है, क्योंकि उनका लाइफ़साइकल और व्यू लाइफ़साइकल हमेशा सिंक में रहता है. इसलिए,observeको कॉल करते समयthisयाviewLifecycleOwnerमें से किसी एक का इस्तेमाल करना सुरक्षित होता है. (b/151765086)
डिपेंडेंसी में बदलाव
- फ़्रैगमेंट, गतिविधि
1.2.0-alpha03पर निर्भर करते हैं. इसमें गतिविधि1.2.0-alpha02में पेश किए गए Activity Result API में काफ़ी सुधार किए गए हैं.
वर्शन 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: इसमें शामिल ProGuard नियमों का दायरा कम किया गया है, ताकि यह पक्का किया जा सके कि इस्तेमाल न की गई Fragment क्लास को हटाया जा सके. (b/149665169) - फ़्रैगमेंट
1.2.3से:UseRequireInsteadOfGetLint चेक में फ़ॉल्स पॉज़िटिव की समस्या ठीक की गई. यह समस्या तब होती थी, जब Kotlin प्रॉपर्टी के नाम को शैडो करने वाले लोकल वैरिएबल के नाम का इस्तेमाल किया जाता था. (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)
UseRequireInsteadOfGetLint चेक में, 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 में ये बदलाव शामिल हैं.
लिंट की नई जांचें
- लिंट,
onCreateView(),onViewCreated(), औरonActivityCreated()मेंOnBackPressedDispatcherको कॉल करने के लिए,LifecycleOwnerके तौर परviewLifecycleOwnerका इस्तेमाल करने का सुझाव देता है. (b/142117657) - एक नया लिंट चेक जोड़ा गया है. इससे यह पुष्टि होती है कि
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) - लिंट की कई जांचों के लिए फ़ॉर्मैटिंग ठीक की गई (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)- उस समस्या को ठीक किया गया है जिसमें
<fragment>टैग के ज़रिए जोड़े गए फ़्रैगमेंट के साथFragmentManager.findFragment()काम नहीं करता था. (b/147784323) <fragment>टैग का इस्तेमाल करके बड़े किए गए फ़्रैगमेंट को अब लेआउट में होने पर, हमेशाonCreate()से पहलेonInflate()को कॉल मिलता है. (aosp/1215856)- जब गतिविधि पहले ही खत्म हो चुकी हो, तब
FragmentManagerके किसी इंस्टेंस परtoString()को कॉल करने पर, अब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में जोड़ा गया है. - लाइफ़साइकल व्यूमॉडल सेव्डस्टेट इंटिग्रेशन:
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लॉगिंग को चालू करने की सुविधा मिलती है.
मौजूदा समस्याएं
- सिर्फ़
FragmentContainerViewपरclassयाandroid:nameएट्रिब्यूट के ज़रिए रेफ़र किए गए फ़्रैगमेंट को 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>टैग का इस्तेमाल करते समय, Fragment1.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)
डिपेंडेंसी में बदलाव
- अब फ़्रैगमेंट, लाइफ़साइकल
2.2.0-rc03, लाइफ़साइकल ViewModel SavedState1.0.0-rc03, और ऐक्टिविटी1.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 अबgetViewLifecycleOwner()के बजाय Kotlin प्रॉपर्टी ऐक्सेस सिंटैक्सviewLifecycleOwnerका इस्तेमाल करता है. यह सुविधा Fragment1.2.0-rc01में जोड़ी गई थी. (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)- नया Lint चेक जोड़ा गया है. इससे यह पक्का किया जाता है कि
onCreateView(),onViewCreated()याonActivityCreated()सेLiveDataको मॉनिटर करते समय,getViewLifecycleOwner()का इस्तेमाल किया जा रहा हो. (b/137122478)
गड़बड़ियां ठीक की गईं
DialogFragmentपरonDismissऔरonCancelकॉलबैक अब यह गारंटी देते हैं कि उन्हें पास किया गयाDialogInterface, शून्य नहीं है. साथ ही, जब उन्हें लागू किया जाता है, तोgetDialog()शून्य नहीं होता. (b/141974033)FragmentContainerViewअबclassयाandroid:nameसे तय किए गए फ़्रैगमेंट को इन्फ़्लेशन के हिस्से के तौर पर जोड़ता है. इससे यह पक्का होता है किfindFragmentById()औरfindFragmentByTag()तुरंत काम करें. (b/142520327)- स्टेट सेव होने की वजह से,
IllegalStateExceptionमें मौजूदFragmentContainerViewको ठीक किया गया. (b/142580713) FragmentContainerViewक्लास को अस्पष्ट किए जाने पर,FragmentContainerViewमें मौजूदUnsupportedOperationExceptionको ठीक किया गया है. (b/142657034)
मौजूदा समस्याएं
- सिर्फ़
FragmentContainerViewपरclassयाandroid:nameएट्रिब्यूट के ज़रिए रेफ़र किए गए फ़्रैगमेंट को 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)- Transition
1.3.0-beta01का इस्तेमाल करते समय, फ़्रैगमेंट अबandroidx.transitionट्रांज़िशन के पूरा होने का इंतज़ार करते हैं. इसके अलावा, फ़्रेमवर्क ट्रांज़िशन और ऐनिमेशन भी पूरे होने का इंतज़ार करते हैं. इन समस्याओं को Fragment1.2.0-alpha03और Fragment1.2.0-alpha02में ठीक कर दिया गया था. इसके बाद,onDestroyView()को डिसपैच किया जाता है. (aosp/1119841) - ट्रांज़िशन
1.3.0-beta01का इस्तेमाल करते समय, फ़्रैगमेंट अब एक ही कंटेनर पर नए ट्रांज़िशन / ऐनिमेशन शुरू करने से पहले,androidx.transitionट्रांज़िशन को सही तरीके से रद्द करते हैं. (aosp/1119841) androidx.transitionका इस्तेमाल करते समय, एपीआई 17 और इससे पहले के वर्शन पर, फ़्रैगमेंट के रूट व्यू परandroidx.transitionट्रांज़िशन का इस्तेमाल करने से जुड़ी समस्या को ठीक किया गया है.FragmentContainerView(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को दिखाता है जिसमें फ़्रैगमेंट जोड़ा गया है. हालांकि, यहFragmentManagerशून्य नहीं होना चाहिए.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)
- Fragment
1.2.0-alpha02में, ऐनिमेशन से जुड़ी समस्या को ठीक कर दिया गया था. अब फ़्रैगमेंट,onDestroyView()को भेजने से पहले ट्रांज़िशन के पूरा होने का इंतज़ार करते हैं. (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 रिलीज़ हो गया है. इस वर्शन में शामिल बदलाव यहां देखे जा सकते हैं.
नई सुविधाएं
SavedStateViewModelFactoryअब डिफ़ॉल्ट फ़ैक्ट्री है. इसका इस्तेमालby viewModels(),by activityViewModels(),ViewModelProviderकंस्ट्रक्टर याFragmentके साथViewModelProviders.of()का इस्तेमाल करते समय किया जाता है. (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)तरीका जोड़ा गया. Kotlin एक्सटेंशन भीfragment-ktxमें उपलब्ध है. (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) - Fragment
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का इस्तेमाल करते समय,IllegalStateExceptions के लिए एक तरीका जोड़ा गया. (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 अब फ़्रैगमेंट के व्यू को अटैच करने के बाद और
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 को कॉल करेगा
एपीआई में हुए बदलाव
- बदलाव: पहले से बंद की जा चुकी
FragmentFactoryinstantiateतरीके को हटा दिया गया है. यह तरीका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()को किसी दूसरे FragmentManager से अटैच किए गए फ़्रैगमेंट के साथ कॉल करने पर, चुपचाप फ़ेल होने के बजायIllegalStateExceptionदिखता है (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-ktx1.1.0 स्टेबल (b/121209673) पर निर्भर करता है- अब
openActionBarOverflowOrOptionsMenuका इस्तेमालFragmentScenarioके साथ किया जा सकता है. इससे, फ़्रैगमेंट होस्ट किए गए विकल्प मेन्यू (b/121126668) की जांच की जा सकती है
एपीआई में हुए बदलाव
requireArguments()तरीका जोड़ा गया है. यह@NonNull Bundleदिखाता है याIllegalStateExceptionदिखाता है (b/121196360)- यह जानकारी जोड़ी गई है कि
getLifecycle(),getViewLifecycleOwner(), औरgetViewLifecycleOwnerLiveData()को बदला नहीं जाना चाहिए. साथ ही, आने वाले समय में रिलीज़ होने वाले वर्शन में इन्हें फ़ाइनल कर दिया जाएगा. अगर आपने इस तरीके को अभी बदला है, तो कृपया सुविधा के लिए अनुरोध सबमिट करें. (aosp/880714) - यह नोट जोड़ा गया है कि
getViewModelStore()को बदला नहीं जाना चाहिए. साथ ही, इसे आने वाले समय में रिलीज़ होने वाले वर्शन में फ़ाइनल कर दिया जाएगा. अगर आपने इस तरीके को अभी बदला है, तो कृपया सुविधा के लिए अनुरोध सबमिट करें. (aosp/880713) - Fragments की पिछली रिलीज़ के साथ बाइनरी कंपैटिबिलिटी से जुड़ी समस्या ठीक की गई. (aosp/887877) (aosp/889834)
गड़बड़ियां ठीक की गईं
setTargetFragment()कोnullपास करने पर, टारगेट फ़्रैगमेंट सही तरीके से हटा दिए जाते हैं. (aosp/849969)- उस समस्या को ठीक किया गया है जिसमें टारगेट फ़्रैगमेंट, कभी-कभी
onDestroy()में या उसके बाद उपलब्ध नहीं होते थे. (b/122312935) - DialogFragment के onDismiss() को अब
onDestroy()से पहले कॉल किया जाता है. (aosp/874133) (aosp/890734)
वर्शन 1.1.0-alpha03
17 दिसंबर, 2018
नई सुविधाएं
- फ़्रैगमेंट अब
BundleSavedStateRegistryOwnerको लागू करता है और हाल ही में रिलीज़ हुई SavedState लाइब्रेरी [aosp/824380] पर निर्भर करता है by activityViewModelsKotlin प्रॉपर्टी डेलिगेट को जोड़ा गया है, ताकि कंटेनिंग ऐक्टिविटी से जुड़े ViewModels को वापस पाया जा सके [b/119050253]by viewModelsKotlin प्रॉपर्टी डेलिगेट को बड़ा कर दिया गया है, ताकि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पर निर्भर करता है.