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

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