
जेस्चर नेविगेशन की सुविधा, 'पीछे जाने पर झलक दिखाने वाला हाथ का जेस्चर' है. इसकी मदद से, उपयोगकर्ताओं को यह झलक दिखती है कि स्क्रीन पर पीछे की ओर स्वाइप करने पर वे कहां पहुंचेंगे.
उदाहरण के लिए, पिछले पेज पर जाने के लिए हाथ के जेस्चर का इस्तेमाल करने पर, आपके ऐप्लिकेशन के पीछे होम स्क्रीन की ऐनिमेशन वाली झलक दिख सकती है. जैसा कि पहली इमेज में दिखाए गए मॉकअप में दिखाया गया है.
Android 15 से, प्रिडिक्टिव बैक ऐनिमेशन के लिए डेवलपर का विकल्प अब उपलब्ध नहीं है. होम स्क्रीन पर वापस जाने, एक टास्क से दूसरे टास्क पर जाने, और एक गतिविधि से दूसरी गतिविधि पर जाने जैसे सिस्टम ऐनिमेशन, अब उन ऐप्लिकेशन के लिए दिखेंगे जिन्होंने ऐप्लिकेशन से बाहर निकलने के लिए, अनुमानित जेस्चर की सुविधा के लिए पूरी तरह से या किसी गतिविधि के लेवल पर ऑप्ट-इन किया है.
इस पेज के अगले सेक्शन में बताए गए तरीके से, होम पेज पर वापस ले जाने वाले इस ऐनिमेशन की जांच की जा सकती है.
अनुमानित बैक जेस्चर की सुविधा इस्तेमाल करने के लिए, आपको अपने ऐप्लिकेशन को अपडेट करना होगा. इसके लिए, OnBackPressedCallback
AppCompat 1.6.0-alpha05 (AndroidX) या इसके बाद के वर्शन वाले एपीआई का इस्तेमाल करें. इसके अलावा, OnBackInvokedCallback
प्लैटफ़ॉर्म एपीआई का इस्तेमाल भी किया जा सकता है. ज़्यादातर ऐप्लिकेशन, पुराने सिस्टम के साथ काम करने वाले AndroidX API का इस्तेमाल करते हैं.
इस अपडेट में, बैक नेविगेशन को सही तरीके से इंटरसेप्ट करने के लिए माइग्रेशन पाथ दिया गया है. इसमें, बैक इंटरसेप्शन को KeyEvent.KEYCODE_BACK
और onBackPressed
के तरीकों वाली किसी भी क्लास से बदलना शामिल है. जैसे, Activity
और Dialog
. इसके लिए, नए सिस्टम के Back API का इस्तेमाल किया जाता है.
कोडलैब और Google I/O वीडियो
इस पेज पर मौजूद दस्तावेज़ का इस्तेमाल करने के अलावा, हमारा कोडलैब आज़माएं. यह AndroidX Activity API का इस्तेमाल करके, अनुमानित बैक जेस्चर को मैनेज करने वाले वेबव्यू के इस्तेमाल के सामान्य उदाहरण को लागू करता है.
आपके पास Google I/O का हमारा वीडियो देखने का विकल्प भी है. इसमें, AndroidX और प्लैटफ़ॉर्म एपीआई को लागू करने के अन्य उदाहरणों के बारे में बताया गया है.
ऐसे ऐप्लिकेशन को अपडेट करना जो डिफ़ॉल्ट 'वापस जाएं' नेविगेशन का इस्तेमाल करता है
अनुमानित तरीके से वापस जाने की सुविधा डिफ़ॉल्ट रूप से चालू होती है.
अगर आपका ऐप्लिकेशन फ़्रैगमेंट या नेविगेशन कॉम्पोनेंट का इस्तेमाल करता है, तो AndroidX Activity 1.6.0-alpha05 या इसके बाद के वर्शन पर भी अपग्रेड करें.
कस्टम बैक नेविगेशन का इस्तेमाल करने वाले ऐप्लिकेशन को अपडेट करना
अगर आपका ऐप्लिकेशन, 'वापस जाएं' बटन के लिए कस्टम व्यवहार लागू करता है, तो माइग्रेशन के अलग-अलग पाथ होते हैं. यह इस बात पर निर्भर करता है कि ऐप्लिकेशन, AndroidX का इस्तेमाल करता है या नहीं और वह 'वापस जाएं' नेविगेशन को कैसे मैनेज करता है.
आपका ऐप्लिकेशन, AndroidX का इस्तेमाल करता है | आपका ऐप्लिकेशन, बैक नेविगेशन को कैसे मैनेज करता है | माइग्रेशन के लिए सुझाया गया पाथ (इस पेज पर लिंक) |
हां | AndroidX API | AndroidX के मौजूदा वर्शन को माइग्रेट करना |
काम न करने वाले प्लैटफ़ॉर्म एपीआई | ऐसे AndroidX ऐप्लिकेशन को AndroidX एपीआई पर माइग्रेट करना जिसमें बैक नेविगेशन के लिए काम न करने वाले एपीआई शामिल हैं | |
नहीं | ऐसे प्लैटफ़ॉर्म के एपीआई जो काम नहीं करते, लेकिन माइग्रेट किए जा सकते हैं | ऐप्लिकेशन को प्लैटफ़ॉर्म एपीआई पर माइग्रेट करना, जो बैक नेविगेशन के लिए काम न करने वाले एपीआई का इस्तेमाल करता है |
प्लैटफ़ॉर्म के एपीआई काम नहीं करते, लेकिन माइग्रेट नहीं हो पा रहे | अपने ऐप्लिकेशन की AndroidManifest.xml फ़ाइल के <application> या <activity> टैग में, android:enableOnBackInvokedCallback एट्रिब्यूट को false पर सेट करके, कुछ समय के लिए ऑप्ट आउट करें. |
AndroidX के बैक नेविगेशन को माइग्रेट करना
इस इस्तेमाल के उदाहरण का सबसे ज़्यादा इस्तेमाल किया जाता है. साथ ही, इसका सबसे ज़्यादा सुझाव दिया जाता है. यह उन नए या मौजूदा ऐप्लिकेशन पर लागू होता है जो OnBackPressedDispatcher
के साथ कस्टम जेस्चर नेविगेशन मैनेजमेंट लागू करते हैं. इस बारे में कस्टम बैक नेविगेशन की सुविधा उपलब्ध कराना में बताया गया है.
यह पक्का करने के लिए कि OnBackPressedDispatcher
(जैसे, फ़्रैगमेंट और नेविगेशन कॉम्पोनेंट) का इस्तेमाल पहले से ही कर रहे एपीआई, अनुमानित बैक जेस्चर के साथ आसानी से काम करें, AndroidX Activity 1.6.0-alpha05 पर अपग्रेड करें.
```xml
// In your build.gradle file:
dependencies {
// Add this in addition to your other dependencies
implementation "androidx.activity:activity:1.6.0-alpha05"
```
AndroidX ऐप्लिकेशन को AndroidX API पर माइग्रेट करना, जिसमें बैक नेविगेशन के लिए काम न करने वाले एपीआई शामिल हैं
अगर आपका ऐप्लिकेशन AndroidX लाइब्रेरी का इस्तेमाल करता है, लेकिन काम न करने वाले बैक नेविगेशन एपीआई को लागू करता है या उनका रेफ़रंस देता है, तो आपको नए व्यवहार के साथ काम करने के लिए, AndroidX एपीआई का इस्तेमाल करने के लिए माइग्रेट करना होगा.
काम न करने वाले एपीआई को AndroidX एपीआई पर माइग्रेट करने के लिए:
अपने सिस्टम के बैक हैंडलिंग लॉजिक को AndroidX के
OnBackPressedDispatcher
पर माइग्रेट करें. इसके लिए,OnBackPressedCallback
को लागू करें. ज़्यादा जानकारी के लिए, पसंद के मुताबिक बैक नेविगेशन उपलब्ध कराना लेख पढ़ें.'वापस जाएं' जेस्चर को इंटरसेप्ट करने की सुविधा बंद करने के लिए,
OnBackPressedCallback
को बंद करें.OnBackPressed
याKeyEvent.KEYCODE_BACK
की मदद से, बैक इवेंट को इंटरसेप्ट करना बंद करें.पक्का करें कि आपने AndroidX Activity 1.6.0-alpha05 पर अपग्रेड कर लिया हो.
// In your build.gradle file: dependencies { // Add this in addition to your other dependencies implementation "androidx.activity:activity:1.6.0-alpha05"
ऐसे ऐप्लिकेशन को प्लैटफ़ॉर्म एपीआई पर माइग्रेट करना जो बैक नेविगेशन के लिए काम न करने वाले एपीआई का इस्तेमाल करता है
अगर आपका ऐप्लिकेशन AndroidX लाइब्रेरी का इस्तेमाल नहीं कर सकता और इसके बजाय, काम न करने वाले एपीआई का इस्तेमाल करके, बैक नेविगेशन को लागू करता है या उसका रेफ़रंस देता है, तो आपको OnBackInvokedCallback
प्लैटफ़ॉर्म एपीआई पर माइग्रेट करना होगा.
काम न करने वाले एपीआई को प्लैटफ़ॉर्म एपीआई पर माइग्रेट करने के लिए, यह तरीका अपनाएं:
Android 13 या उसके बाद के वर्शन वाले डिवाइसों पर, नए
OnBackInvokedCallback
एपीआई का इस्तेमाल करें. साथ ही, Android 12 या उससे पहले के वर्शन वाले डिवाइसों पर, काम न करने वाले एपीआई का इस्तेमाल करें.onBackInvokedDispatcher
की मदद से,OnBackInvokedCallback
में अपना कस्टम बैक लॉजिक रजिस्टर करें. इससे मौजूदा गतिविधि पूरी नहीं हो पाती. साथ ही, जब उपयोगकर्ता सिस्टम के 'वापस जाएं' नेविगेशन को पूरा कर लेता है, तो आपके कॉलबैक को 'वापस जाएं' ऐक्शन पर प्रतिक्रिया देने का मौका मिलता है.OnBackInvokedCallback
को अनरजिस्टर करें, ताकि 'वापस जाएं' जेस्चर को इंटरसेप्ट करना बंद किया जा सके. ऐसा न करने पर, उपयोगकर्ताओं को सिस्टम के 'वापस जाएं' नेविगेशन का इस्तेमाल करते समय, ऐप्लिकेशन का गलत तरीके से काम करना दिख सकता है. उदाहरण के लिए, व्यू के बीच "फ़्रीज़ होना" और उन्हें आपके ऐप्लिकेशन को बंद करने के लिए मजबूर करना.onBackPressed
से लॉजिक को माइग्रेट करने का तरीका यहां बताया गया है:Kotlin
@Override fun onCreate() { if (BuildCompat.isAtLeastT()) { onBackInvokedDispatcher.registerOnBackInvokedCallback( OnBackInvokedDispatcher.PRIORITY_DEFAULT ) { /** * onBackPressed logic goes here. For instance: * Prevents closing the app to go home screen when in the * middle of entering data to a form * or from accidentally leaving a fragment with a WebView in it * * Unregistering the callback to stop intercepting the back gesture: * When the user transitions to the topmost screen (activity, fragment) * in the BackStack, unregister the callback by using * OnBackInvokeDispatcher.unregisterOnBackInvokedCallback * (https://developer.android.com/reference/kotlin/android/window/OnBackInvokedDispatcher#unregisteronbackinvokedcallback) */ } } }
Java
@Override void onCreate() { if (BuildCompat.isAtLeastT()) { getOnBackInvokedDispatcher().registerOnBackInvokedCallback( OnBackInvokedDispatcher.PRIORITY_DEFAULT, () -> { /** * onBackPressed logic goes here - For instance: * Prevents closing the app to go home screen when in the * middle of entering data to a form * or from accidentally leaving a fragment with a WebView in it * * Unregistering the callback to stop intercepting the back gesture: * When the user transitions to the topmost screen (activity, fragment) * in the BackStack, unregister the callback by using * OnBackInvokeDispatcher.unregisterOnBackInvokedCallback * (https://developer.android.com/reference/kotlin/android/view/OnBackInvokedDispatcher#unregisteronbackinvokedcallback) */ } ); } }
Android 13 और उसके बाद के वर्शन के लिए,
OnBackPressed
याKeyEvent.KEYCODE_BACK
का इस्तेमाल करके, बैक इवेंट को इंटरसेप्ट करना बंद करें.
OnBackInvokedCallback
को PRIORITY_DEFAULT
या
PRIORITY_OVERLAY
के साथ रजिस्टर किया जा सकता है. यह सुविधा, मिलते-जुलते AndroidX
OnBackPressedCallback
में उपलब्ध नहीं है. PRIORITY_OVERLAY
के साथ कॉलबैक रजिस्टर करना, कुछ मामलों में मददगार होता है.
यह तब लागू होता है, जब onKeyPreIme()
से माइग्रेट किया जाता है और आपके कॉलबैक को खुले हुए आईएमई के बजाय, बैक जेस्चर की ज़रूरत होती है. IME खोले जाने पर, PRIORITY_DEFAULT
के साथ कॉलबैक रजिस्टर करते हैं. PRIORITY_OVERLAY
के साथ अपना कॉलबैक रजिस्टर करें, ताकि यह पक्का किया जा सके कि OnBackInvokedDispatcher
, ओपन IME के बजाय आपके कॉलबैक पर बैक जेस्चर भेजे.
अनुमानित बैक ट्रैक से ऑप्ट आउट करना
ऑप्ट आउट करने के लिए, AndroidManifest.xml
में <application>
टैग में, android:enableOnBackInvokedCallback
फ़्लैग को false
पर सेट करें.
<application
...
android:enableOnBackInvokedCallback="false"
... >
...
</application>
इसे 'गलत है' पर सेट करने से, ये काम होते हैं:
- इससे, पिछले पेज पर जाने के लिए हाथ के जेस्चर के सिस्टम ऐनिमेशन की सुविधा बंद हो जाती है.
OnBackInvokedCallback
को अनदेखा करता है, लेकिनOnBackPressedCallback
कॉल काम करना जारी रखते हैं.
गतिविधि के लेवल पर ऑप्ट आउट करना
Android 16 से, android:enableOnBackInvokedCallback
फ़्लैग की मदद से, गतिविधि के लेवल पर सिस्टम के अनुमानित ऐनिमेशन से ऑप्ट आउट किया जा सकता है. इस व्यवहार की वजह से, कई गतिविधियों वाले बड़े ऐप्लिकेशन को, अनुमानित वापसी वाले जेस्चर पर माइग्रेट करना आसान हो जाता है.
नीचे दिए गए कोड में, enableOnBackInvokedCallback
को MainActivity
से होम स्क्रीन पर वापस जाने वाले सिस्टम ऐनिमेशन को चालू करने के लिए सेट करने का उदाहरण दिया गया है:
<manifest ...>
<application . . .
android:enableOnBackInvokedCallback="false">
<activity
android:name=".MainActivity"
android:enableOnBackInvokedCallback="true"
...
</activity>
<activity
android:name=".SecondActivity"
android:enableOnBackInvokedCallback="false"
...
</activity>
</application>
</manifest>
android:enableOnBackInvokedCallback
फ़्लैग का इस्तेमाल करते समय, इन बातों का ध्यान रखें:
android:enableOnBackInvokedCallback=false
सेटिंग से, गतिविधि के लेवल पर या ऐप्लिकेशन के लेवल पर, अनुमानित रीप्ले ऐनिमेशन बंद हो जाते हैं. यह इस बात पर निर्भर करता है कि आपने टैग कहां सेट किया है. साथ ही, यह सिस्टम कोOnBackInvokedCallback
प्लैटफ़ॉर्म एपीआई के कॉल को अनदेखा करने का निर्देश देता है. हालांकि,OnBackPressedCallback
पर कॉल करना जारी रहेगा, क्योंकिOnBackPressedCallback
पुराने सिस्टम के साथ काम करता है औरonBackPressed
एपीआई को कॉल करता है. यह एपीआई, Android 13 से पहले के वर्शन पर काम नहीं करता.- ऐप्लिकेशन लेवल पर
enableOnBackInvokedCallback
फ़्लैग सेट करने पर, ऐप्लिकेशन में सभी गतिविधियों के लिए डिफ़ॉल्ट वैल्यू सेट हो जाती है. गतिविधि लेवल पर फ़्लैग सेट करके, हर गतिविधि के लिए डिफ़ॉल्ट वैल्यू को बदला जा सकता है, जैसा कि पिछले कोड उदाहरण में दिखाया गया है.
कॉलबैक के सबसे सही तरीके
यहां, सिस्टम के बैक कॉलबैक का इस्तेमाल करने के सबसे सही तरीके बताए गए हैं:
BackHandler
(लिखने के लिए), OnBackPressedCallback
या
OnBackInvokedCallback
.
यूज़र इंटरफ़ेस (यूआई) की उस स्थिति का पता लगाएं जो हर कॉलबैक को चालू और बंद करती है
यूज़र इंटरफ़ेस (यूआई) की स्थिति एक ऐसी प्रॉपर्टी है जिससे यूआई के बारे में पता चलता है. हमारा सुझाव है कि आप ये ज़रूरी चरण अपनाएं.
यूज़र इंटरफ़ेस (यूआई) की उस स्थिति का पता लगाएं जो हर कॉलबैक को चालू और बंद करती है.
StateFlow
या Compose State जैसे डेटा होल्डर को मॉनिटर करने के तरीके का इस्तेमाल करके, उस स्थिति को तय करें. साथ ही, स्थिति में बदलाव होने पर कॉलबैक को चालू या बंद करें.
अगर आपका ऐप्लिकेशन पहले से ही, बैक लॉजिक को शर्तों वाले स्टेटमेंट से जोड़ रहा था, तो इसका मतलब है कि आपने बैक इवेंट के होने के बाद, उस पर कार्रवाई की है. नए कॉलबैक के साथ इस पैटर्न से बचें. अगर हो सके, तो कॉलबैक को कंडीशनल स्टेटमेंट से बाहर ले जाएं और इसके बजाय, कॉलबैक को ऐसे डेटा होल्डर टाइप से जोड़ें जिसे निगरानी की जा सकती है.
यूज़र इंटरफ़ेस (यूआई) लॉजिक के लिए, सिस्टम के बैक कॉलबैक का इस्तेमाल करना
यूज़र इंटरफ़ेस (यूआई) लॉजिक से यह तय होता है कि यूज़र इंटरफ़ेस (यूआई) को कैसे दिखाया जाए. यूआई लॉजिक चलाने के लिए, सिस्टम बैक कॉलबैक का इस्तेमाल करें. जैसे, कोई पॉप-अप दिखाना या ऐनिमेशन चलाना.
अगर आपका ऐप्लिकेशन, सिस्टम के बैक कॉलबैक को चालू करता है, तो प्रिडिक्टिव ऐनिमेशन नहीं चलते और आपको बैक इवेंट को मैनेज करना होगा. सिर्फ़ यूज़र इंटरफ़ेस (यूआई) से जुड़े लॉजिक को चलाने के लिए, कॉलबैक न बनाएं.
उदाहरण के लिए, अगर आपको सिर्फ़ लॉग करने के लिए बैक इवेंट को इंटरसेप्ट करना है, तो इसके बजाय ऐक्टिविटी या फ़्रैगमेंट के लाइफ़साइकल में लॉग करें.
- ऐक्टिविटी से ऐक्टिविटी या फ़्रैगमेंट से ऐक्टिविटी के मामलों के लिए, लॉग करें कि
onDestroy
में मौजूदisFinishing
, ऐक्टिविटी के लाइफ़साइकल मेंtrue
है या नहीं. - फ़्रैगमेंट-टू-फ़्रैगमेंट के मामलों के लिए, लॉग करें कि फ़्रैगमेंट के व्यू लाइफ़साइकल में,
onDestroy
मेंisRemoving
सही है या नहीं. इसके अलावा,FragmentManager.OnBackStackChangedListener
में जाकर,onBackStackChangeStarted
याonBackStackChangeCommitted
में से किसी एक तरीके का इस्तेमाल करके लॉग इन करें.
Compose केस के लिए, Compose डेस्टिनेशन से जुड़े ViewModel
के onCleared()
कॉलबैक में लॉग करें. यह जानने का सबसे अच्छा तरीका है कि मैसेज लिखने के लिए चुना गया डेस्टिनेशन, बैक स्टैक से कब हटाया गया और मिटाया गया.
एक ही ज़िम्मेदारी वाले कॉलबैक बनाना
डिस्पैचर में एक से ज़्यादा कॉलबैक जोड़े जा सकते हैं. कॉलबैक को एक स्टैक में जोड़ा जाता है. इसमें, आखिरी बार जोड़ा गया चालू कॉलबैक, अगले बैक जेस्चर को हैंडल करता है. हर बैक जेस्चर के लिए एक कॉलबैक होता है.
अगर किसी कॉलबैक की एक ही ज़िम्मेदारी है, तो उसे चालू या बंद करने की स्थिति को मैनेज करना आसान होता है. उदाहरण के लिए:

दूसरे चित्र में दिखाया गया है कि स्टैक में एक से ज़्यादा कॉलबैक कैसे हो सकते हैं और हर कॉलबैक एक काम के लिए ज़िम्मेदार होता है. कोई कॉलबैक सिर्फ़ तब चलता है, जब स्टैक में उसके ऊपर मौजूद कॉलबैक बंद हों. इस उदाहरण में, जब उपयोगकर्ता किसी फ़ॉर्म में डेटा डालता है, तो "क्या आपको यकीन है..." कॉलबैक चालू होता है. इसके अलावा, किसी भी दूसरी स्थिति में यह कॉलबैक बंद रहता है. जब उपयोगकर्ता फ़ॉर्म से बाहर निकलने के लिए, पीछे की ओर स्वाइप करता है, तो कॉलबैक की मदद से पुष्टि करने वाला डायलॉग बॉक्स खुलता है.
दूसरे कॉलबैक में, ऐसा मटीरियल कॉम्पोनेंट शामिल किया जा सकता है जो अनुमानित स्क्रीन पर वापस जाने की सुविधा के साथ काम करता हो. इसके अलावा, इसमें Progress API का इस्तेमाल करके AndroidX ट्रांज़िशन या कोई अन्य कस्टम कॉलबैक भी शामिल किया जा सकता है.
childFragmentManager
का कॉलबैक तब चलता है, जब ऊपर दिए गए कॉलबैक बंद हों और इस FragmentManager
के लिए बैक स्टैक खाली न हो, जहां childFragmentManager
किसी फ़्रैगमेंट में अटैच हो. इस उदाहरण में, यह इंटरनल कॉलबैक बंद है.
इसी तरह, अगर ऊपर दिए गए कॉलबैक बंद हैं और supportFragmentManager
का स्टैक खाली नहीं है, तो supportFragmentManager
का इंटरनल कॉलबैक चलता है. नेविगेशन के लिए FragmentManager
या NavigationComponent
का इस्तेमाल करने पर, यह व्यवहार एक जैसा रहता है, क्योंकि NavigationComponent
, FragmentManager
पर निर्भर करता है. इस उदाहरण में,
यह कॉलबैक तब चलता है, जब उपयोगकर्ता ने फ़ॉर्म में टेक्स्ट डाला हो. इससे, "क्या आपको यकीन है..." कॉलबैक बंद हो जाता है.
आखिर में, super.onBackPressed()
सिस्टम-लेवल का कॉलबैक है, जो ऊपर दिए गए कॉलबैक बंद होने पर फिर से चलता है. होम स्क्रीन पर वापस जाने, एक गतिविधि से दूसरी गतिविधि पर जाने, और एक टास्क से दूसरे टास्क पर जाने जैसे सिस्टम ऐनिमेशन को ट्रिगर करने के लिए, supportFragmentManager
का बैक स्टैक खाली होना चाहिए, ताकि उसका इंटरनल कॉलबैक बंद हो जाए.
पीछे जाने के लिए हाथ के जेस्चर के ऐनिमेशन की जांच करना
अगर अब भी Android 13 या Android 14 का इस्तेमाल किया जा रहा है, तो इमेज 1 में दिखाए गए, होम पेज पर वापस जाने वाले ऐनिमेशन की जांच की जा सकती है.
इस ऐनिमेशन की जांच करने के लिए, यह तरीका अपनाएं:
अपने डिवाइस पर, सेटिंग > सिस्टम > डेवलपर के लिए सेटिंग और टूल पर जाएं.
प्रिडिक्टिव बैक ऐनिमेशन चुनें.
अपडेट किया गया ऐप्लिकेशन लॉन्च करें और उसे इस्तेमाल करने के लिए, 'वापस जाएं' जेस्चर का इस्तेमाल करें.