वापस जाने के लिए कस्टम नेविगेशन की सुविधा दें

बैक नेविगेशन की मदद से, उपयोगकर्ता उन स्क्रीन का इतिहास देखते हैं जहां वे पिछले पेज पर जाते हैं पहले विज़िट किया गया. इस तरह के सभी 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 का कोई भी रजिस्टर किया गया इंस्टेंस चाहे जो भी हो.