बैक नेविगेशन की मदद से, उपयोगकर्ता उन स्क्रीन का इतिहास देखते हैं जहां वे पिछले पेज पर जाते हैं पहले विज़िट किया गया. इस तरह के सभी Android डिवाइसों पर 'वापस जाएं' बटन उपलब्ध होता है ताकि आपको अपने ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) में 'वापस जाएं' बटन न जोड़ना चाहिए. इसके आधार पर उपयोगकर्ता के Android डिवाइस पर, यह बटन कोई बटन या सॉफ़्टवेयर हो सकता है बटन.
उपयोगकर्ता के नेविगेट करने पर, Android डेस्टिनेशन का बैक स्टैक बनाए रखता है
आपके आवेदन में. इससे आम तौर पर, Android डिवाइस पर सही तरीके से नेविगेट कर पाता है
'वापस जाएं' बटन दबाने पर पिछले डेस्टिनेशन. हालांकि, कुछ ऐसे भी होते हैं
ऐसे मामलों में जहां आपके ऐप्लिकेशन को
उपयोगकर्ताओं को सबसे अच्छा अनुभव दे सके. उदाहरण के लिए, WebView
का इस्तेमाल करते समय,
हो सकता है कि आप उपयोगकर्ता को यह काम करने की अनुमति देने के लिए 'वापस जाएं' बटन का डिफ़ॉल्ट व्यवहार बदलना चाहें
पिछली स्क्रीन के बजाय उनके वेब ब्राउज़िंग इतिहास पर वापस जाते हैं
आपके ऐप्लिकेशन में.
कस्टम बैक नेविगेशन लागू करें
ComponentActivity
, बेस
FragmentActivity
की क्लास
और AppCompatActivity
,
आपको यह कंट्रोल करने की अनुमति देता है कि 'वापस जाएं' बटन कैसे काम करे. इसके लिए,
OnBackPressedDispatcher
,
जिसे getOnBackPressedDispatcher()
पर कॉल करके वापस पाया जा सकता है.
OnBackPressedDispatcher
की मदद से, यह कंट्रोल किया जाता है कि 'वापस जाएं' बटन से होने वाले इवेंट कैसे भेजे जाएं
एक या ज़्यादा OnBackPressedCallback
को
ऑब्जेक्ट हैं. OnBackPressedCallback
का कंस्ट्रक्टर,
शुरुआती चालू होने की स्थिति. सिर्फ़ तब, जब कॉलबैक की सुविधा चालू हो (यानी,
isEnabled()
true
लौटता है) डिस्पैचर,
handleOnBackPressed()
'वापस जाएं' बटन इवेंट को मैनेज करने के लिए. चालू किए जाने की स्थिति बदलने के लिए, कॉल करें
setEnabled()
.
कॉलबैक, addCallback
तरीके का इस्तेमाल करके जोड़े जाते हैं. हमारा सुझाव है कि आप
addCallback()
का इस्तेमाल करें
तरीका है, जिसके लिए LifecycleOwner
लेना पड़ता है.
इससे पक्का होता है कि OnBackPressedCallback
को सिर्फ़ तब जोड़ा जाए, जब LifecycleOwner
Lifecycle.State.STARTED
.
यह गतिविधि, रजिस्टर किए गए कॉलबैक को भी हटा देती है, जब
LifecycleOwner
को बंद कर दिया गया है. इससे मेमोरी लीक होने से बचा जा सकता है और उसे ज़रूरत के मुताबिक बनाया जा सकता है
फ़्रैगमेंट या लाइफ़साइकल के अन्य मालिकों में इस्तेमाल करने के लिए, जिनका लाइफ़टाइम कम होता है
गतिविधि नहीं होती.
यहां कॉलबैक लागू करने का एक उदाहरण दिया गया है:
Kotlin
class MyFragment : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // This callback will only be 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 will only be 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
का कोई भी रजिस्टर किया गया इंस्टेंस चाहे जो भी हो.