onBackPressed() पुराना हो गया है: Android में "बैक" बटन को सही तरीके से कैसे संभालें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

onBackPressed() पुराना हो गया है: Android में "बैक" बटन को सही तरीके से कैसे संभालें

\n\n

यदि आपने कभी Kotlin में Android के लिए कोड लिखा है, तो आपने निश्चित रूप से onBackPressed() विधि का सामना किया होगा। कुछ समय पहले तक, सिस्टम के "बैक" बटन को इंटरसेप्ट करने का यह मानक तरीका था। लेकिन Android Studio के नवीनतम संस्करणों में, आप देखेंगे कि यह विधि कटी हुई है और @Deprecated एनोटेशन से चिह्नित है। एक स्वाभाविक प्रश्न उठता है: "onBackPressed() is deprecated. What is the alternative?" — इसी प्रश्न ने Stack Overflow पर हज़ारों व्यूज़ प्राप्त किए हैं।

\n\n

इस लेख में, हम समझेंगे कि Google ने पुराने दृष्टिकोण को क्यों छोड़ा, और Kotlin में वास्तविक कोड उदाहरणों के साथ दिखाएंगे कि अब "बैक" बटन को सही तरीके से कैसे संभालें। आप OnBackPressedDispatcher, OnBackPressedCallback और इसे Activity और Fragment के जीवनचक्र के साथ कैसे एकीकृत करें, इसके बारे में जानेंगे। चलिए शुरू करते हैं!

\n\n

onBackPressed() deprecated क्यों हो गया?

\n\n

मुख्य कारण Android का आर्किटेक्चरल विकास है। पुरानी onBackPressed() विधि Activity से कठोरता से जुड़ी हुई थी। यह फ़्रैगमेंट को ध्यान में नहीं रखती थी, आधुनिक पैटर्न (MVVM, Clean Architecture) का समर्थन नहीं करती थी, और अक्सर भ्रम पैदा करती थी जब कई घटक एक ही घटना को संसाधित करने का प्रयास करते थे। Google ने प्रतिनिधिमंडल का मार्ग अपनाया: अब "बैक" की हैंडलिंग एक विशेष डिस्पैचर — OnBackPressedDispatcher को सौंपी जाती है।

\n\n

यह परिवर्तन नेविगेशन को सरल बनाने और Jetpack समर्थन में सुधार करने की व्यापक रणनीति का हिस्सा है। अब आप कई कॉलबैक जोड़ सकते हैं जो सामंजस्यपूर्ण रूप से काम करते हैं और जीवनचक्र को ध्यान में रखते हैं। यदि आप Navigation Component का उपयोग करते हैं, तो "बैक" की हैंडलिंग स्वचालित रूप से नेविगेशन ग्राफ को सौंपी जाती है।

\n\n

क्या आया बदले में: OnBackPressedDispatcher

\n\n

Activity 1.0.0 (AndroidX का हिस्सा) से शुरू करते हुए, Google ने एक नया API पेश किया। मुख्य घटक हैं:

\n\n
    \n
  • OnBackPressedDispatcher — केंद्रीय डिस्पैचर जो सभी कॉलबैक का प्रबंधन करता है।
  • \n
  • OnBackPressedCallback — वह क्लास जिसे आप अपनी हैंडलिंग लॉजिक को परिभाषित करने के लिए इनहेरिट करते हैं।
  • \n
  • LifecycleOwner — जीवनचक्र (Activity या Fragment) से जुड़ाव।
  • \n
\n\n

Activity विधि को ओवरराइड करने के बजाय, आप डिस्पैचर में एक कॉलबैक रजिस्टर करते हैं। डिस्पैचर स्वयं तय करता है कि कौन सा कॉलबैक पहले निष्पादित करना है (LIFO सिद्धांत के अनुसार — अंतिम जोड़ा गया पहले संसाधित होता है)।

\n\n

Activity में बुनियादी कार्यान्वयन

\n\n

आइए एक सरल उदाहरण से शुरू करते हैं। मान लीजिए, आप "बैक" दबाने पर एक पुष्टिकरण डायलॉग दिखाना चाहते हैं, ताकि उपयोगकर्ता गलती से ऐप बंद न कर दे।

\n\n

पुराना तरीका (पुराना हो गया):

\n\n
// अब ऐसा नहीं करते!\n@Deprecated\noverride fun onBackPressed() {\n    showExitDialog()\n}
\n\n

OnBackPressedDispatcher के साथ नया तरीका:

\n\n
class MainActivity : AppCompatActivity() {\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n\n        // कॉलबैक रजिस्टर करें\n        onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {\n            override fun handleOnBackPressed() {\n                // आपकी कस्टम लॉजिक\n                showExitDialog()\n            }\n        })\n    }\n\n    private fun showExitDialog() {\n        AlertDialog.Builder(this)\n            .setTitle("बाहर निकलें")\n            .setMessage("क्या आप वाकई बाहर निकलना चाहते हैं?")\n            .setPositiveButton("हाँ") { _, _ -> finish() }\n            .setNegativeButton("नहीं", null)\n            .show()\n    }\n}
\n\n

OnBackPressedCallback(true) कंस्ट्रक्टर में true पैरामीटर पर ध्यान दें। यह

ब्लॉग

पुस्तक अनुशंसाएँ