फ़्रैगमेंट

अपने ऐप्लिकेशन को कई स्वतंत्र स्क्रीन में बांटें. ये स्क्रीन, किसी गतिविधि में होस्ट की जाती हैं.
नया अपडेट स्टेबल रिलीज़ रिलीज़ कैंडिडेट बीटा रिलीज़ ऐल्फ़ा रिलीज़
13 अगस्त, 2025 1.8.9 - - -

डिपेंडेंसी का एलान करना

Fragment पर डिपेंडेंसी जोड़ने के लिए, आपको अपने प्रोजेक्ट में Google Maven रिपॉज़िटरी जोड़नी होगी. ज़्यादा जानकारी के लिए, Google की Maven रिपॉज़िटरी पढ़ें.

अपने ऐप्लिकेशन या मॉड्यूल के लिए, build.gradle फ़ाइल में उन आर्टफ़ैक्ट की डिपेंडेंसी जोड़ें जिनकी आपको ज़रूरत है:

ग्रूवी

dependencies {
    def fragment_version = "1.8.9"

    // Java language implementation
    implementation "androidx.fragment:fragment:$fragment_version"
    // Kotlin
    implementation "androidx.fragment:fragment-ktx:$fragment_version"
    // Compose
    implementation "androidx.fragment:fragment-compose:$fragment_version"
    // Testing Fragments in Isolation
    debugImplementation "androidx.fragment:fragment-testing-manifest:$fragment_version"
    androidTestImplementation "androidx.fragment:fragment-testing:$fragment_version"
}

Kotlin

dependencies {
    val fragment_version = "1.8.9"

    // Java language implementation
    implementation("androidx.fragment:fragment:$fragment_version")
    // Kotlin
    implementation("androidx.fragment:fragment-ktx:$fragment_version")
    // Compose
    implementation("androidx.fragment:fragment-compose:$fragment_version")
    // Testing Fragments in Isolation
    debugImplementation("androidx.fragment:fragment-testing:$fragment_version")
}

डिपेंडेंसी के बारे में ज़्यादा जानने के लिए, बिल्ड डिपेंडेंसी जोड़ना लेख पढ़ें.

सुझाव/राय दें या शिकायत करें

आपके सुझाव, शिकायत या राय से Jetpack को बेहतर बनाने में मदद मिलती है. अगर आपको कोई नई समस्या मिलती है या आपके पास इस लाइब्रेरी को बेहतर बनाने के लिए सुझाव हैं, तो हमें बताएं. कृपया नई समस्या सबमिट करने से पहले, इस लाइब्रेरी में शामिल मौजूदा समस्याओं को देखें. स्टार बटन पर क्लिक करके, किसी मौजूदा समस्या के लिए वोट किया जा सकता है.

नई समस्या दर्ज करने का तरीका

ज़्यादा जानकारी के लिए, Issue Tracker का दस्तावेज़ देखें.

वर्शन 1.8

वर्शन 1.8.9

13 अगस्त, 2025

androidx.fragment:fragment-*:1.8.9 रिलीज़ हो गया है. वर्शन 1.8.9 में ये बदलाव शामिल हैं.

गड़बड़ियां ठीक की गईं

  • उस समस्या को ठीक किया गया है जिसकी वजह से, अनुमानित बैक जेस्चर को रद्द करने पर, छिपाने की कार्रवाई शुरू हो जाती थी. इससे ऐनिमेटर का इस्तेमाल करते समय, बाद का जेस्चर सही तरीके से ऐनिमेट नहीं होता था. (I0a400, b/384765586)
  • उस गड़बड़ी को ठीक किया गया है जिसमें setMaxLifecycle और popBackStack के कॉम्बिनेशन से, टॉप फ़्रैगमेंट को RESUMED पर ले जाने में समस्या आ सकती थी. (I3448b, b/406127576)

वर्शन 1.8.8

4 जून, 2025

androidx.fragment:fragment-*:1.8.8 रिलीज़ हो गया है. वर्शन 1.8.8 में ये बदलाव शामिल हैं.

गड़बड़ियां ठीक की गईं

  • उस समस्या को ठीक कर दिया गया है जिसमें setMaxLifecycle(Lifecycle.State.INITIALIZED) का इस्तेमाल करके जोड़े गए फ़्रैगमेंट की स्थिति को सेव करते समय FragmentManager क्रैश हो जाता था. इन फ़्रैगमेंट को onCreate() से नहीं गुज़ारा गया है. इसलिए, अब इनमें कोई भी स्थिति सेव नहीं की गई है और न ही onSaveInstanceState() को कॉल किया गया है. (I6e37a)

वर्शन 1.8.7

20 मई, 2025

androidx.fragment:fragment-*:1.8.7 रिलीज़ हो गया है. वर्शन 1.8.7 में ये बदलाव शामिल हैं.

गड़बड़ियां ठीक की गईं

  • हमने एक समस्या को ठीक किया है. इस समस्या में, एक ही फ़्रेम में पॉप और बदलने की कार्रवाइयां करने के बाद, FragmentManager सही स्थिति में नहीं होता था. इससे बैकस्टैक को पॉप करने के दौरान क्रैश हो सकता था. ऐसा popBackStack या अनुमानित बैक जेस्चर के ज़रिए किया जा सकता था. (I50ad1)
  • AndroidX ट्रांज़िशन का इस्तेमाल करने की वजह से होने वाली क्रैश की समस्या को ठीक किया गया है. इस समस्या में, फ़्रैगमेंट के लगातार होने वाले ट्रांज़ैक्शन, शुरू नहीं हुए ट्रांज़िशन को रद्द करने की कोशिश करते हैं. साथ ही, AndroidX ट्रांज़िशन लाइब्रेरी, ट्रांज़िशन की स्थिति को सही तरीके से मिटा नहीं पाती है. (b/414612221 देखें). (Ib5235)

वर्शन 1.8.6

12 फ़रवरी, 2025

androidx.fragment:fragment-*:1.8.6 रिलीज़ हो गया है. वर्शन 1.8.6 में ये बदलाव शामिल हैं.

गड़बड़ियां ठीक की गईं

  • FragmentContainerView के setOnApplyWindowInsetsListener ओवरराइड में अब एक नल लिसनर होता है, जो फ़्रेमवर्क की अनुमति के मुताबिक होता है. (I575f0, b/282790626)

वर्शन 1.8.5

30 अक्टूबर, 2024

androidx.fragment:fragment-*:1.8.5 रिलीज़ हो गया है. वर्शन 1.8.5 में ये बदलाव शामिल हैं.

गड़बड़ियां ठीक की गईं

  • हमने IllegalStateException को ठीक किया है. यह saveBackStack सिर्फ़ तब ट्रिगर होता था, जब अनुमानित बैक जेस्चर को रद्द कर दिया जाता था या उसमें रुकावट आ जाती थी. (I3387d, b/342419080)

वर्शन 1.8.4

2 अक्टूबर, 2024

androidx.fragment:fragment-*:1.8.4 रिलीज़ हो गया है. वर्शन 1.8.4 में ये बदलाव शामिल हैं.

गड़बड़ियां ठीक की गईं

  • हमने उस समस्या को ठीक कर दिया है जिसमें Androidx Transitions का इस्तेमाल करते समय, सिस्टम के 'वापस जाएं' बटन को तुरंत दबाने या वापस जाने के लिए जेस्चर का इस्तेमाल करने पर, फ़्रैगमेंट क्रैश हो जाते थे. (Ibc038, b/364804225)
  • फ़्रैगमेंट में एक समस्या ठीक की गई है. इसमें, अनुमानित बैक जेस्चर को रोकने पर, फ़्रैगमेंट मैनेजर को अनडिफ़ाइंड स्थिति में भेज दिया जाता था. साथ ही, गलत फ़्रैगमेंट भी दिखता था. (If82e2, b/338624457)
  • AndroidFragment के उस UninitializedPropertyAccessException को ठीक किया गया है जो AndroidFragment इंस्टेंस के इस्तेमाल की जा रही क्लास को डाइनैमिक रूप से स्वैप करने पर होता था. (I12dea)

वर्शन 1.8.3

4 सितंबर, 2024

androidx.fragment:fragment-*:1.8.3 रिलीज़ हो गया है. वर्शन 1.8.3 में ये बदलाव शामिल हैं.

गड़बड़ियां ठीक की गईं

  • FragmentManager अब पीछे जाने की झलक दिखाने वाले जेस्चर को हैंडल करते समय, लंबित कार्रवाइयों को ध्यान में रखता है. इससे यह पक्का हो जाएगा कि सिस्टम को पहले जैसा करने पर, अब IndexOutOfBoundsException नहीं होगा. (I9ba32, b/342316801)
  • AndroidFragment को कंपोज़िशन में जोड़ने पर, अब यह क्रैश नहीं होता. ऐसा तब होता है, जब गतिविधि/फ़्रैगमेंट की स्थिति पहले से ही सेव हो. (I985e9, b/356643968)

वर्शन 1.8.2

24 जुलाई, 2024

androidx.fragment:fragment-*:1.8.2 रिलीज़ हो गया है. वर्शन 1.8.2 में ये बदलाव शामिल हैं.

गड़बड़ियां ठीक की गईं

  • AndroidFragment अब उन मामलों को ठीक से हैंडल करता है जहां पैरंट फ़्रैगमेंट को फ़्रैगमेंट बैक स्टैक पर रखा जाता है. इससे उस फ़्रैगमेंट पर वापस जाने पर, 'No view found for id' की समस्याएं नहीं होती हैं. (I94608)
  • FragmentTransaction.add तरीके से जोड़े गए फ़्रैगमेंट, अब ViewGroup लेने के बाद onContainerAvailable तक इंतज़ार करते हैं. इसके बाद, वे onStart() पर जाते हैं. इससे उस एपीआई का इस्तेमाल करने वाले लोगों पर असर पड़ता है. जैसे, AndroidFragment. अब AndroidFragment को onStart() के ज़रिए आगे बढ़ाने से पहले, कंपोज़िशन में फिर से शामिल होने के लिए AndroidFragment का इंतज़ार करना होगा. (I94608)

वर्शन 1.8.1

26 जून, 2024

androidx.fragment:fragment-*:1.8.1 रिलीज़ हो गया है. वर्शन 1.8.1 में ये बदलाव शामिल हैं.

गड़बड़ियां ठीक की गईं

  • उस समस्या को ठीक किया गया है जिसकी वजह से कंटेनर के बिना फ़्रैगमेंट, बैक जेस्चर का अनुमान लगाने की सुविधा शुरू होने पर तुरंत DESTROYED हो जाते थे. अब ये CREATED स्थिति में तब तक रहते हैं, जब तक जेस्चर पूरा नहीं हो जाता. (If6b83, b/345244539)

वर्शन 1.8.0

12 जून, 2024

androidx.fragment:fragment-*:1.8.0 रिलीज़ हो गया है. वर्शन 1.8.0 में ये बदलाव शामिल हैं.

1.7.0 के बाद हुए ज़रूरी बदलाव

  • fragment-compose आर्टफ़ैक्ट में अब AndroidFragment Composable शामिल है. इसकी मदद से, फ़्रैगमेंट क्लास के नाम का इस्तेमाल करके, Compose के क्रम में फ़्रैगमेंट जोड़े जा सकते हैं. यह फ़्रैगमेंट की स्थिति को सेव करने और वापस लाने की प्रोसेस को अपने-आप मैनेज करता है. इसका इस्तेमाल, फ़्रैगमेंट को बड़ा करने के लिए AndroidViewBinding का इस्तेमाल करने के पहले से सुझाए गए तरीके के विकल्प के तौर पर किया जाना चाहिए.
  • FragmentManager के OnBackStackChangedListener इंटरफ़ेस पर मौजूद onBackStackChangeCancelled कॉलबैक अब FragmentManager में कार्रवाइयां करने के दौरान ट्रिगर होता है. इससे यह onBackStackChangeCommitted कॉलबैक के ट्रिगर होने के समय के ज़्यादा करीब आ जाता है.

वर्शन 1.8.0-rc01

29 मई, 2024

androidx.fragment:fragment-*:1.8.0-rc01 रिलीज़ हो गया है. वर्शन 1.8.0-rc01 में ये बदलाव शामिल हैं.

गड़बड़ियां ठीक की गईं

  • FragmentManagers OnBackStackChangedListener इंटरफ़ेस पर मौजूद onBackStackChangeCancelled कॉलबैक अब FragmentManager में कार्रवाइयां करने के दौरान ट्रिगर होता है. इससे यह onBackStackChangeCommitted कॉलबैक के ट्रिगर होने के समय के ज़्यादा करीब आ जाता है. (I5ebfb, b/332916112)

वर्शन 1.8.0-beta01

14 मई, 2024

androidx.fragment:fragment-*:1.8.0-beta01 रिलीज़ हो गया है. वर्शन 1.8.0-beta01 में ये बदलाव शामिल हैं.

गड़बड़ियां ठीक की गईं

  • फ़्रैगमेंट 1.7.1: पीछे जाने पर झलक दिखाने वाला हाथ का जेस्चर की सुविधा अब सिर्फ़ उन लेन-देन के लिए काम करेगी जिनमें सभी फ़्रैगमेंट में Animator या Seekable Androidx Transition है. इससे उस समस्या को ठीक किया गया है जिसमें कुछ हद तक आगे-पीछे किए जा सकने वाले लेन-देन को रद्द करने पर, काली स्क्रीन दिखती थी. (I43037, b/339169168)

वर्शन 1.8.0-alpha02

17 अप्रैल, 2024

androidx.fragment:fragment-*:1.8.0-alpha02 रिलीज़ हो गया है. वर्शन 1.8.0-alpha02 में ये बदलाव शामिल हैं.

गड़बड़ियां ठीक की गईं

  • फ़्रैगमेंट 1.7.0-rc02: ऐसे लॉग जोड़े गए हैं जिनसे यह पता चलेगा कि बिना किसी अन्य ट्रांज़िशन के sharedElement सेट करने पर, वह क्यों नहीं चलेगा. (Iec48e)
  • फ़्रैगमेंट 1.7.0-rc02: इस वर्शन में, एक गड़बड़ी को ठीक किया गया है. इस गड़बड़ी में, अगर किसी ऐसे ट्रांज़िशन में कोई नॉन-सीकेबल शेयर किया गया एलिमेंट जोड़ा जाता था जहां अन्य सभी ट्रांज़िशन सीकेबल थे, तो ऐप्लिकेशन क्रैश हो जाता था. अब लेन-देन को सही तरीके से, खोजे नहीं जा सकने वाले लेन-देन के तौर पर माना जाएगा. (I18ccd)

वर्शन 1.8.0-alpha01

3 अप्रैल, 2024

androidx.fragment:fragment-*:1.8.0-alpha01 रिलीज़ हो गया है. वर्शन 1.8.0-alpha01 में ये बदलाव शामिल हैं.

नई सुविधाएं

  • नए AndroidFragment Composable की मदद से, फ़्रैगमेंट क्लास के नाम का इस्तेमाल करके, कंपोज़ हेरारकी में फ़्रैगमेंट जोड़े जा सकते हैं. यह फ़्रैगमेंट की स्थिति को सेव करने और वापस लाने की प्रोसेस को अपने-आप मैनेज करता है. इसका इस्तेमाल, AndroidViewBinding Composable.(b/312895363, Icf841) के विकल्प के तौर पर किया जा सकता है

दस्तावेज़ में बदलाव

  • OnBackStackChangedListener एपीआई के लिए दस्तावेज़ अपडेट किए गए हैं. इनमें बताया गया है कि इन्हें कब कॉल किया जाता है और इनका इस्तेमाल कैसे किया जाना चाहिए. (I0bfd9)

डिपेंडेंसी अपडेट

वर्शन 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 में ये बदलाव शामिल हैं.

डिपेंडेंसी अपडेट

वर्शन 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 में जोड़े गए नए animateToStart API पर निर्भर करता है.

वर्शन 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)
  • OnBackStackChangedListener onBackStackChangeStarted और onBackStackChangeCommitted कॉलबैक अब सिर्फ़ तब लागू होते हैं, जब FragmentManager बैक स्टैक में बदलाव किया जाता है. (I66055, b/274788957)

वर्शन 1.6.0-alpha08

22 मार्च, 2023

androidx.fragment:fragment-*:1.6.0-alpha08 रिलीज़ हो गया है. वर्शन 1.6.0-alpha08 में ये बदलाव शामिल हैं.

व्यवहार में बदलाव

  • फ़्रैगमेंट ऑपरेशन के लागू होने से पहले, OnBackStackChangedListener.onBackStackChangeCommited कॉलबैक को लागू करने के लिए, उसके समय में बदलाव किया गया है. इससे यह पक्का होता है कि कॉलबैक को कभी भी ऐसा फ़्रैगमेंट नहीं भेजा जाएगा जो अलग हो गया हो. (I66a76, b/273568280)

गड़बड़ियां ठीक की गईं

  • Fragment 1.5.6: इस वर्शन में, उस समस्या को ठीक किया गया है जिसमें setFragmentResultListener के अंदर clearFragmentResultListener को कॉल करने पर, यह काम नहीं करता था. ऐसा तब होता था, जब Lifecycle पहले से ही STARTED हो और कोई नतीजा पहले से ही उपलब्ध हो. (If7458)

डिपेंडेंसी से जुड़े अपडेट

वर्शन 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)

डिपेंडेंसी अपडेट

संस्‍करण 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)

डिपेंडेंसी अपडेट

वर्शन 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 अब Lifecycle 2.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() का अब इस्तेमाल नहीं किया जा सकता. Fragment 1.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 के साथ इंटिग्रेट किया गया है. इसे Lifecycle 2.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>().navController
    
  • FragmentScenario अब Closeable को लागू करता है. इससे, Kotlin के use तरीके या try-with-resources के साथ इसका इस्तेमाल किया जा सकता है.

  • जोड़ा गया FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE} यह तय करने के लिए कि फ़्रैगमेंट ट्रांज़िशन में, आपकी थीम से लिया गया स्टैंडर्ड ऐक्टिविटी-ट्रांज़िशन ऐनिमेशन चालू करना है या नहीं.

  • FragmentManager.enableNewStateManager(boolean) के एक्सपेरिमेंटल एपीआई को हटा दिया गया है. अब नया स्टेट मैनेजर ही उपलब्ध है.

एक से ज़्यादा बैक स्टैक

FragmentManager, फ़्रैगमेंट ट्रांज़ैक्शन से बना बैक स्टैक बनाए रखता है. इसमें addToBackStack() का इस्तेमाल किया जाता है. इससे आपको उन लेन-देन को पॉप करने और पिछली स्थिति पर वापस जाने की सुविधा मिलती है. इसके लिए, फ़्रैगमेंट की स्थिति सेव करने के तरीकों का इस्तेमाल किया जाता है, ताकि आपके फ़्रैगमेंट अपनी स्थिति को सही तरीके से वापस ला सकें.

इस रिलीज़ में, इन तरीकों को और बेहतर बनाया गया है. इसके लिए, तीन नए FragmentManager एपीआई उपलब्ध कराए गए हैं: saveBackStack(String name), restoreBackStack(String name), और clearBackStack(String name). ये एपीआई, 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.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 से: शेयर किए गए एलिमेंट के ट्रांज़िशन में हुई रिग्रेशन की समस्या को ठीक किया गया है. यह समस्या Fragment 1.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)

  • FragmentStrictMode Violation क्लास को बड़ा कर दिया गया है, ताकि हर उल्लंघन के आधार पर स्ट्रक्चर की जानकारी जोड़ी जा सके. इससे आपको यह पुष्टि करने में मदद मिलती है कि किस वजह से उल्लंघन हुआ है. साथ ही, उल्लंघन करने वाले फ़्रैगमेंट (If5118, b/187871150) के बारे में भी पता चलता है. हर Violation में यह जानकारी शामिल होती है:

    • WrongFragmentContainerViolation में अब वह ViewGroup शामिल है जिसे Fragment में जोड़ने की कोशिश की जा रही थी. (I83c75, b/187871150)
    • TargetFragmentUsageViolation को SetTargetFragmentUsageViolation, GetTargetFragmentUsageViolation, और GetTargetFragmentRequestCodeUsageViolation में बांटा गया है. SetTargetFragmentUsageViolation में टारगेट फ़्रैगमेंट और अनुरोध कोड शामिल है. (I741b4, b/187871150)
    • SetUserVisibleHintViolation में अब वह बूलियन वैल्यू शामिल है जिसे setUserVisibleHint() में पास किया गया था. (I00585, b/187871150)
    • FragmentTagUsageViolation में अब वह ViewGroup शामिल है जिसमें <fragment> टैग, फ़्रैगमेंट को बड़ा करने की कोशिश कर रहा था.(I5dbbc, b/187871150)
    • FragmentReuseViolation में अब Fragment के पिछले इंस्टेंस का यूनीक आईडी शामिल है. इसी इंस्टेंस की वजह से उल्लंघन हुआ था. (I0544d, b/187871150)
    • RetainInstanceUsageViolation अब ऐब्स्ट्रैक्ट है. इसके दो सबक्लास हैं: SetRetainInstanceUsageViolation और GetRetainInstanceUsageViolation. ये दोनों, उल्लंघन के टाइप के दो मामलों को दिखाते हैं. (Ic81e5, b/187871150)

व्यवहार में बदलाव

  • FragmentContainerView अब fitsSystemWindow एट्रिब्यूट को प्रोग्राम के हिसाब से या एक्सएमएल के ज़रिए बदलने की कोशिश करने पर, एक अपवाद दिखाता है. हर फ़्रैगमेंट के व्यू को इनसेट मैनेज करने चाहिए. (Ie6651, b/187304502)

वर्शन 1.4.0-alpha01

18 मई, 2021

androidx.fragment:fragment:1.4.0-alpha01, androidx.fragment:fragment-ktx:1.4.0-alpha01, और androidx.fragment:fragment-testing:1.4.0-alpha01 रिलीज़ किए जाते हैं. वर्शन 1.4.0-alpha01 में ये बदलाव शामिल हैं.

नई सुविधाएं

  • FragmentContainerView अब getFragment() मेथड उपलब्ध कराता है. यह मेथड, कंटेनर में सबसे हाल ही में जोड़े गए फ़्रैगमेंट को दिखाता है. यह findFragmentById() के लॉजिक का इस्तेमाल करता है. इसमें FragmentContainerView का आईडी होता है. हालांकि, इससे कॉल को चेन किया जा सकता है. (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)

बाहरी योगदान

वर्शन 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.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)

डिपेंडेंसी से जुड़े अपडेट

वर्शन 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 पर अपग्रेड करना होगा.
  • 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 और SavedState 1.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 और AndroidX Transition इंस्टेंस को एक साथ इस्तेमाल करने की कोशिश करने पर, गड़बड़ी के मैसेज में अब उस फ़्रैगमेंट का नाम दिखता है जिसमें अमान्य ट्रांज़िशन है. (b/155574969)

व्यवहार में बदलाव

  • अब किसी फ़्रैगमेंट के onCreate() लाइफ़साइकल के तरीके में, ActivityResultLauncher पर launch() को कॉल किया जा सकता है. (b/161464278)
  • अब onCreate() के बाद registerForActivityResult() को कॉल करने पर, एक अपवाद दिखता है. इससे पता चलता है कि इसकी अनुमति नहीं है. कॉन्फ़िगरेशन में बदलाव के बाद, नतीजे नहीं मिलने पर यह अपवाद दिखता है. (b/162255449)
  • FragmentActivity अब FragmentManager की स्थिति को वापस लाने के लिए, Activity 1.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 में ये बदलाव शामिल हैं.

नई सुविधाएं

एपीआई में हुए बदलाव

  • 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 का इस्तेमाल करते समय, Fragment 1.3.0-alpha02 में हुई रिग्रेशन की समस्या को ठीक किया गया है. (b/151652127, aosp/1263328, aosp/1265163)
  • कॉन्फ़िगरेशन में बदलाव करने के बाद, फ़्रैगमेंट से prepareCall का इस्तेमाल करते समय क्रैश होने की समस्या ठीक की गई. (b/152137004)
  • setTargetFragment() का इस्तेमाल करते समय, शेयर किए गए एलिमेंट और एक्ज़िट ट्रांज़िशन को अनदेखा करने की समस्या को ठीक किया गया है. (b/152023196)
  • Fragment 1.2.4: Fragment के ProGuard नियमों को अपडेट किया गया है, ताकि रखे गए फ़्रैगमेंट को अस्पष्ट किया जा सके. (b/151605338)
  • Fragment 1.2.4 से: DialogFragment क्लास पर FragmentLiveDataObserve Lint नियम बंद कर दिया गया है, क्योंकि उनका लाइफ़साइकल और व्यू लाइफ़साइकल हमेशा सिंक में रहता है. इसलिए, observe को कॉल करते समय this या viewLifecycleOwner में से किसी एक का इस्तेमाल करना सुरक्षित होता है. (b/151765086)

डिपेंडेंसी में बदलाव

  • फ़्रैगमेंट, गतिविधि 1.2.0-alpha03 पर निर्भर करते हैं. इसमें गतिविधि 1.2.0-alpha02 में पेश किए गए 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 से: UseRequireInsteadOfGet Lint चेक में फ़ॉल्स पॉज़िटिव की समस्या ठीक की गई. यह समस्या तब होती थी, जब 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 इंस्टेंस के लिए नहीं किया जाता. इससे Fragment 1.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() को कॉल करने से पहले बंद हो जाता है. इससे फ़्रैगमेंट के लाइफ़साइकल के व्यवहार का पता चलता है. इसे पहले Fragment 1.3.0-alpha04 में रिलीज़ किया गया था. (b/154645875)
  • अब किसी फ़्रैगमेंट पर setMenuVisibility(false) को कॉल करने से, उसके चाइल्ड फ़्रैगमेंट के ज़रिए उपलब्ध कराए गए मेन्यू की दृश्यता में सही तरीके से बदलाव होता है. इसे पहले Fragment 1.3.0-alpha04 में रिलीज़ किया गया था. (b/153593580)

वर्शन 1.2.4

वर्शन 1.2.4

1 अप्रैल, 2020

androidx.fragment:fragment:1.2.4, androidx.fragment:fragment-ktx:1.2.4, और androidx.fragment:fragment-testing:1.2.4 रिलीज़ किए जाते हैं. वर्शन 1.2.4 में ये बदलाव शामिल हैं.

गड़बड़ियां ठीक की गईं

  • Fragment ProGuard के नियमों को अपडेट किया गया है, ताकि बनाए रखे गए फ़्रैगमेंट को छिपाया जा सके. (b/151605338)
  • DialogFragment क्लास पर FragmentLiveDataObserve लिंट नियम बंद कर दिया गया है, क्योंकि इनका लाइफ़साइकल और व्यू लाइफ़साइकल हमेशा सिंक होता है. इसलिए, observe को कॉल करते समय this या viewLifecycleOwner में से किसी एक का इस्तेमाल करना सुरक्षित होता है. (b/151765086)

वर्शन 1.2.3

वर्शन 1.2.3

18 मार्च, 2020

androidx.fragment:fragment:1.2.3, androidx.fragment:fragment-ktx:1.2.3, और androidx.fragment:fragment-testing:1.2.3 रिलीज़ किए जाते हैं. वर्शन 1.2.3 में ये बदलाव शामिल हैं.

गड़बड़ियां ठीक की गईं

  • DialogFragment में मौजूद उस गड़बड़ी को ठीक कर दिया गया है जिसकी वजह से onCreateDialog() में getLayoutInflater() को कॉल करने पर StackOverflowError होता था. (b/117894767, aosp/1258665)
  • Fragment में शामिल ProGuard के नियमों का दायरा कम किया गया है, ताकि इस्तेमाल न की गई Fragment क्लास को हटाया जा सके. (b/149665169)
  • UseRequireInsteadOfGet Lint चेक में, 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.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> टैग का इस्तेमाल करते समय, Fragment 1.2.0-rc04 में हुई रिग्रेशन की समस्या को ठीक किया गया है. इस वजह से, गतिविधि बंद होने के दौरान onViewCreated() को गलत तरीके से कॉल किया जाता था. (b/146290333)
  • <fragment> टैग की मदद से जोड़े गए फ़्रैगमेंट का नॉन-कॉन्फ़िग अब ठीक से क्लियर हो जाता है.भले ही, वे लेआउट में कभी-कभी ही दिखते हों. जैसे, सिर्फ़ आपके लैंडस्केप लेआउट में. इस वजह से, इन फ़्रैगमेंट को अब CREATED में सही तरीके से ले जाया जाता है. भले ही, वे आपके लेआउट में न हों. ऐसा इसलिए किया जाता है, ताकि उन्हें इंस्टैंशिएट न किया जाए, लेकिन वे किसी भी लाइफ़साइकल के तरीके से कभी न गुज़रें. (b/145769287)

वर्शन 1.2.0-rc04

18 दिसंबर, 2019

androidx.fragment:fragment:1.2.0-rc04, androidx.fragment:fragment-ktx:1.2.0-rc04, और androidx.fragment:fragment-testing:1.2.0-rc04 रिलीज़ किए जाते हैं. वर्शन 1.2.0-rc04 में ये बदलाव शामिल हैं.

गड़बड़ियां ठीक की गईं

  • विज़ुअल से जुड़ी समस्याओं से बचने के लिए, TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE, और TRANSIT_FRAGMENT_FADE के ऐनिमेशन में बदलाव किया गया है. (b/145468417)

वर्शन 1.2.0-rc03

4 दिसंबर, 2019

androidx.fragment:fragment:1.2.0-rc03, androidx.fragment:fragment-ktx:1.2.0-rc03, और androidx.fragment:fragment-testing:1.2.0-rc03 रिलीज़ किए जाते हैं. वर्शन 1.2.0-rc03 में ये बदलाव शामिल हैं.

गड़बड़ियां ठीक की गईं

  • अनजाने में हुए व्यवहार में बदलाव से जुड़ी समस्या को ठीक किया गया है. इसमें, हटाए गए फ़्रैगमेंट को findFragmentById() / findFragmentByTag() से अब भी वापस लाया जा सकता है, जबकि उनके एग्ज़िट ऐनिमेशन/ट्रांज़िशन चल रहे हैं. (b/143982969, aosp/1167585)
  • अब पैरंट फ़्रैगमेंट से पहले चाइल्ड फ़्रैगमेंट को सही तरीके से रोका जाता है. ऐसा तब होता है, जब कंटेनिंग ऐक्टिविटी onSaveInstanceState() को कॉल करती है. (b/144380645)
  • छिपे हुए फ़्रैगमेंट को पॉप अप करने के बाद, व्यू को गलत तरीके से INVISIBLE के तौर पर मार्क करने की समस्या को ठीक किया गया है. (b/70793925)
  • फ़्रैगमेंट के शेयर किए गए एलिमेंट के ट्रांज़िशन अब उन व्यू को हैंडल करते हैं जिन्हें घुमाया गया है, स्केल किया गया है वगैरह. (b/142835261)

दस्तावेज़ से जुड़े अपडेट

  • setUserVisibleHint() के बंद होने से जुड़े दस्तावेज़ के बारे में ज़्यादा जानकारी दी गई. (b/143897055)
  • setFragmentFactory() और getFragmentFactory() के दस्तावेज़ को बेहतर बनाया गया है, ताकि यह साफ़ तौर पर बताया जा सके कि FragmentFactory सेट करने से, चाइल्ड FragmentManager पर भी असर पड़ेगा. (aosp/1170095)

डिपेंडेंसी में बदलाव

  • अब फ़्रैगमेंट, लाइफ़साइकल 2.2.0-rc03, लाइफ़साइकल ViewModel SavedState 1.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 का इस्तेमाल करता है. यह सुविधा Fragment 1.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 ट्रांज़िशन के पूरा होने का इंतज़ार करते हैं. इसके अलावा, फ़्रेमवर्क ट्रांज़िशन और ऐनिमेशन भी पूरे होने का इंतज़ार करते हैं. इन समस्याओं को Fragment 1.2.0-alpha03 और Fragment 1.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 Test 1.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 को कॉल करेगा

एपीआई में हुए बदलाव

  • बदलाव: पहले से बंद की जा चुकी FragmentFactory instantiate तरीके को हटा दिया गया है. यह तरीका Bundle लेता था. aosp/953856
  • बदलाव: FragmentPagerAdapter और FragmentStatePagerAdapter में मौजूद RESUME_ONLY_CURRENT_FRAGMENT और USE_SET_USER_VISIBLE_HINT कॉन्स्टेंट का नाम बदलकर, क्रमशः BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT और BEHAVIOR_SET_USER_VISIBLE_HINT कर दिया गया है. aosp/954782

गड़बड़ियां ठीक की गईं

  • setMaxLifecycle() के ज़रिए जिन फ़्रैगमेंट के लाइफ़साइकल को सीमित किया गया है उन्हें अब फ़ाइनल स्टेट में पहुंचने से पहले फिर से शुरू नहीं किया जाता. b/131557151
  • setMaxLifecycle(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-ktx 1.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 activityViewModels Kotlin प्रॉपर्टी डेलिगेट को जोड़ा गया है, ताकि कंटेनिंग ऐक्टिविटी से जुड़े ViewModels को वापस पाया जा सके [b/119050253]
  • by viewModels Kotlin प्रॉपर्टी डेलिगेट को बड़ा कर दिया गया है, ताकि ViewModelStoreOwner पाने के लिए एक वैकल्पिक लैम्ब्डा तरीका अपनाया जा सके. इससे, पैरंट फ़्रैगमेंट या अन्य कस्टम ViewModelStoreOwner को val viewModel: MyViewModel by viewModels(::requireParentFragment) [b/119050253] जैसे कोड के साथ पास किया जा सकता है

एपीआई में हुए बदलाव

  • FragmentScenario की मदद से, अब Theme.AppCompat [b/119054431] जैसी थीम तय की जा सकती है. यह एक ऐसा बदलाव है जिससे मौजूदा सिस्टम पर असर पड़ सकता है.
  • requireView() मेथड जोड़ा गया है. यह @NonNull View दिखाता है या IllegalStateException दिखाता है [b/120241368]
  • requireParentFragment() मेथड जोड़ा गया है. यह @NonNull Fragment दिखाता है या IllegalStateException दिखाता है [b/112103783]

गड़बड़ियां ठीक की गईं

  • IllegalStateException को ठीक किया गया: स्थिति सेव नहीं हो सकी b/120814739
  • सेव की गई इंस्टेंस की स्थिति से वापस लाए जा रहे फ़्रैगमेंट को अब हमेशा गैर-शून्य Bundle मिलेगा [b/119794496]
  • हटाए गए फ़्रैगमेंट को फिर से जोड़ने पर, वे अपने Lifecycle ऑब्जेक्ट का फिर से इस्तेमाल नहीं करते [b/118880674]

वर्शन 1.1.0-alpha02

3 दिसंबर, 2018

नई सुविधाएं

  • FragmentScenario के Kotlin एक्सटेंशन की मदद से, अब FragmentFactory इंस्टेंस पास करने के बजाय, फ़्रैगमेंट बनाने के लिए लैम्डा का इस्तेमाल किया जा सकता है. (aosp/812913)

गड़बड़ियां ठीक की गईं

  • पिछली ऐक्टिविटी में नेस्ट किए गए फ़्रैगमेंट का इस्तेमाल करते समय, IllegalStateException को ठीक किया गया (b/119256498)
  • FragmentFactory के साथ FragmentScenario.recreate() का इस्तेमाल करने पर क्रैश होने की समस्या ठीक की गई (aosp/820540)
  • उस समस्या को ठीक किया गया है जिसकी वजह से फ़्रैगमेंट हटाने के बाद, टारगेट फ़्रैगमेंट ऐक्सेस नहीं किए जा सकते थे (aosp/807634)

वर्शन 1.1.0-alpha01

5 नवंबर, 2018

यह fragment-testing आर्टफ़ैक्ट और FragmentScenario का पहला वर्शन है. इसे androidx.test:core API के आधार पर बनाया गया है. ज़्यादा जानकारी के लिए, फ़्रैगमेंट टेस्टिंग का दस्तावेज़ देखें.

नई सुविधाएं

  • अलग-अलग फ़्रैगमेंट की जांच करने के लिए, नई FragmentScenario क्लास.
  • अब किसी भी FragmentManager पर FragmentFactory सेट किया जा सकता है. इससे यह कंट्रोल किया जा सकता है कि नए Fragment इंस्टेंस कैसे इंस्टैंशिएट किए जाएं.
  • किसी फ़्रैगमेंट से ViewModels को वापस पाने के लिए, एक नया by viewModels() Kotlin प्रॉपर्टी डेलिगेट जोड़ा गया है.
  • इनपुट इवेंट (जैसे कि क्लिक) अब फ़्रैगमेंट के onStop() में रद्द कर दिए जाते हैं.

एपीआई में हुए बदलाव

  • Fragment API के सभी सर्फ़ेस पर, nullability एनोटेशन को काफ़ी हद तक बढ़ाया गया है.

गड़बड़ियां ठीक की गईं

  • उस समस्या को ठीक किया गया जिसकी वजह से LiveData के अंदर से फ़्रैगमेंट ऑपरेशन पूरे नहीं हो पाते थे (b/77944637)

मौजूदा समस्याएं

  • FragmentManager से किसी फ़्रैगमेंट को हटाने के बाद, टारगेट फ़्रैगमेंट को ऐक्सेस नहीं किया जा सकता.
  • fragment-testing, सही androidx.test:core:1.0.0 के बजाय androidx.test:core:1.0.0-beta01 पर निर्भर करता है.