बैक नेविगेशन की मदद से, उपयोगकर्ता उन स्क्रीन का इतिहास देखते हैं जहां वे पिछले पेज पर जाते हैं पहले विज़िट किया गया. इस तरह के सभी Android डिवाइसों पर 'वापस जाएं' बटन उपलब्ध होता है ताकि अपने ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) में 'वापस जाएं' बटन न जोड़ें. इसके आधार पर उपयोगकर्ता के Android डिवाइस पर, यह बटन कोई बटन या सॉफ़्टवेयर हो सकता है बटन.
उपयोगकर्ता के नेविगेट करने पर, Android डेस्टिनेशन का बैक स्टैक बनाए रखता है आपके आवेदन में. इससे Android, आपके वेबपेज पर सही तरीके से नेविगेट कर पाता है 'वापस जाएं' बटन दबाने पर पिछले डेस्टिनेशन. हालांकि, कुछ ऐसे भी होते हैं ऐसे मामले जहां आपके ऐप्लिकेशन को उपयोगकर्ताओं को सबसे अच्छा अनुभव दे सके.
उदाहरण के लिए, WebView
का इस्तेमाल करते समय,
हो सकता है कि आप वापस जाएं बटन का डिफ़ॉल्ट व्यवहार बदलना चाहें, ताकि उपयोगकर्ता
पिछली स्क्रीन के बजाय उनके वेब ब्राउज़िंग इतिहास पर वापस जाते हैं
आपके ऐप्लिकेशन में.
Android 13 और उसके बाद वाले वर्शन के लिए, Android डिवाइसों के लिए अनुमानित पीछे जाने वाला जेस्चर शामिल है. यहां की यात्रा पर हूं इस सुविधा के बारे में ज़्यादा जानने के लिए, पिछले जेस्चर का सुझाव देने वाली सुविधा जोड़ना लेख देखें.
कस्टम बैक नेविगेशन लागू करें
ComponentActivity
, बेस
FragmentActivity
की क्लास
और AppCompatActivity
,
आपको 'वापस जाएं' बटन का इस्तेमाल करके,
OnBackPressedDispatcher
,
जिसे getOnBackPressedDispatcher()
पर कॉल करके वापस पाया जा सकता है.
OnBackPressedDispatcher
की मदद से, यह कंट्रोल किया जाता है कि 'वापस जाएं' बटन से होने वाले इवेंट कैसे भेजे जाएं
एक या ज़्यादा OnBackPressedCallback
को
ऑब्जेक्ट हैं. OnBackPressedCallback
का कंस्ट्रक्टर,
शुरुआती चालू होने की स्थिति. जब कॉलबैक चालू किया जाता है—इसका मतलब है कि
isEnabled()
true
वापस भेजता है—डिपैचर, कॉलबैक को कॉल करता है
handleOnBackPressed()
'वापस जाएं' बटन इवेंट को मैनेज करने के लिए. चालू किए जाने की स्थिति बदलने के लिए, कॉल करें
setEnabled()
.
कॉलबैक, addCallback
तरीके का इस्तेमाल करके जोड़े जाते हैं. हमारा सुझाव है कि आप इनका इस्तेमाल करें
addCallback()
तरीका है, जिसके लिए LifecycleOwner
की ज़रूरत होती है.
इससे पक्का होता है कि OnBackPressedCallback
को सिर्फ़ तब जोड़ा जाए, जब LifecycleOwner
Lifecycle.State.STARTED
.
यह गतिविधि, रजिस्टर किए गए कॉलबैक को भी हटा देती है, जब
LifecycleOwner
को बंद किया जाता है, जो मेमोरी को लीक होने से रोकता है और
LifecycleOwner
सही
फ़्रैगमेंट या लाइफ़साइकल के अन्य मालिकों में इस्तेमाल करने के लिए, जिनका लाइफ़टाइम कम होता है
गतिविधि नहीं होती.
यहां कॉलबैक लागू करने का एक उदाहरण दिया गया है:
Kotlin
class MyFragment : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // This callback is only called when MyFragment is at least started val callback = requireActivity().onBackPressedDispatcher.addCallback(this) { // Handle the back button event } // The callback can be enabled or disabled here or in the lambda } ... }
Java
public class MyFragment extends Fragment { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // This callback is only called when MyFragment is at least started OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */) { @Override public void handleOnBackPressed() { // Handle the back button event } }; requireActivity().getOnBackPressedDispatcher().addCallback(this, callback); // The callback can be enabled or disabled here or in handleOnBackPressed() } ... }
addCallback()
का इस्तेमाल करके, एक से ज़्यादा कॉलबैक दिए जा सकते हैं.
ऐसा करने पर, कॉलबैक को उसके क्रम में उलटा क्रम में शुरू कर दिया जाता है
उन्हें जोड़ें—आखिर में जोड़े गए कॉलबैक को, सबसे पहले
'वापस जाएं' बटन का इवेंट. उदाहरण के लिए, अगर नाम वाली तीन कॉलबैक जोड़े जाते हैं
one
, two
, और three
इसी क्रम में शुरू हैं
three
, two
, one
.
कॉलबैक
ज़िम्मेदारी की चेन
पैटर्न. चेन में हर कॉलबैक को सिर्फ़ तब शुरू किया जाता है, जब पहले
कॉलबैक चालू नहीं किया गया. इसका मतलब है कि
पहले दिए गए उदाहरण में, कॉलबैक two
सिर्फ़ तब शुरू होता है, जब कॉलबैक three
चालू नहीं है और कॉलबैक one
को सिर्फ़ तब शुरू किया जाता है, जब कॉलबैक two
चालू नहीं है.
ध्यान दें कि जब addCallback()
का इस्तेमाल करके कॉलबैक जोड़ा जाता है, तो
उसे ज़िम्मेदारी की शृंखला में तब तक नहीं जोड़ा जाता, जब तक
LifecycleOwner
, Lifecycle.State.STARTED
स्थिति में प्रवेश करता है.
हमारा सुझाव है कि OnBackPressedCallback
के लिए, चालू की गई स्थिति को बदलें
सीमित नहीं कर सकते, क्योंकि ऐसा करने से ऊपर बताया गया क्रम बना रहेगा.
यह खास तौर पर तब ज़रूरी होता है, जब आपके एक से ज़्यादा डोमेन पर कॉलबैक रजिस्टर होते हों
नेस्ट किए गए लाइफ़साइकल के मालिक.
जिन मामलों में आपको OnBackPressedCallback
को पूरी तरह से हटाना हो, वहां ऐसा करें.
तुम कॉल कर सकती हो
remove()
.
आम तौर पर, यह ज़रूरी नहीं होता है, क्योंकि जब कॉलबैक अपने-आप हट जाते हैं,
उससे जुड़ा LifecycleOwner
यह है
नष्ट खत्म कर दिया गया.
गतिविधि onBackPressed()
अगर आप इसका इस्तेमाल कर रहे हैं, तो
onBackPressed()
तो हमारा सुझाव है कि 'वापस जाएं' बटन से होने वाले इवेंट को मैनेज करने के लिए,
इसके बजाय, OnBackPressedCallback
का इस्तेमाल करें.
हालांकि, अगर यह बदलाव नहीं किया जा सकता, तो नीचे दिए गए नियम लागू होंगे:
- आपके कॉल करने पर,
addCallback
से रजिस्टर किए गए सभी कॉलबैक का आकलन किया जाता हैsuper.onBackPressed()
. - Android 12 (एपीआई लेवल 32) और उससे पहले के वर्शन में,
onBackPressed
को हमेशा कॉल किया जाता है,OnBackPressedCallback
का कोई भी रजिस्टर किया गया इंस्टेंस चाहे जो भी हो.