नेविगेशन मैप इंटरैक्शन के सबसे सही तरीके

इस पेज पर, आपके ऐप्लिकेशन में नेविगेशन मैप के साथ इंटरैक्ट करने के सबसे सही तरीके बताए गए हैं.

जहां भी हो सके, NavigationView के बजाय NavigationFragment का इस्तेमाल करें

NavigationFragment, NavigationView को रैप करता है और इसके लाइफ़साइकल कॉलबैक को अपने-आप मैनेज करता है. इसलिए, आपको उन्हें खुद मैनेज करने की ज़रूरत नहीं पड़ती. इस तरीके में गड़बड़ी होने की संभावना कम होती है. साथ ही, अपने ऐप्लिकेशन में नेविगेशन का इस्तेमाल करने के लिए, यह तरीका अपनाने का सुझाव दिया जाता है. NavigationFragment का इस्तेमाल करते समय, NavigationView लाइफ़साइकल इवेंट को सीधे तौर पर शुरू न करें.

NavigationView का इस्तेमाल करते समय, लाइफ़साइकल के तरीकों को शुरू करने के लिए, सख्त क्रम का इस्तेमाल करें

NavigationView, नेविगेशन मैप को होस्ट करता है. साथ ही, Android ऐक्टिविटी और फ़्रैगमेंट के तौर पर, लाइफ़साइकल इवेंट को बारीकी से फ़ॉलो करता है. साथ ही, इन लाइफ़साइकल इवेंट के शुरू होने पर, खास कार्रवाइयां करता है. NavigationView, NavigationView#onCreate और NavigationView#onStart पर कई बार शुरू करने की प्रोसेस को एक्ज़ीक्यूट करता है. साथ ही, NavigationView#onStop और NavigationView#onDestroy पर क्लीनअप करता है. इसके अलावा, यह अन्य लाइफ़साइकल इवेंट प्रोसेस होने पर भी ऐसा करता है.

NavigationView लाइफ़साइकल के तरीकों का वही मतलब होता है जो Android ऐक्टिविटी या फ़्रैगमेंट के लिए होता है. उदाहरण के लिए, NavigationView में से onCreate का अनुवाद मोटे तौर पर किया जाता है. साथ ही, इसे Android गतिविधि या फ़्रैगमेंट से लाइफ़साइकल कॉलबैक के ज़रिए शुरू किया जाना चाहिए. NavigationView लाइफ़साइकल कॉलबैक, Android लाइफ़साइकल कॉलबैक पर आधारित होते हैं और उसी क्रम में शुरू होते हैं. इसलिए, इन NavigationView तरीकों को सही क्रम में लगाना ज़रूरी है. ऐसा न करने पर, आपको मेमोरी लीक, यूज़र इंटरफ़ेस (यूआई) से जुड़ी गड़बड़ियां, जगह की जानकारी अपडेट न होने जैसी अन्य समस्याएं आ सकती हैं.

Android की गतिविधि पूरी होने की प्रोसेस के बारे में ज़्यादा जानने के लिए, Android डेवलपर के दस्तावेज़ में गतिविधि पूरी होने की प्रोसेस से जुड़े कॉन्सेप्ट सेक्शन देखें.

यहां दी गई टेबल से पता चलता है कि लाइफ़साइकल के कुछ खास तरीकों के बाद, लाइफ़साइकल के अन्य तरीकों को कब शुरू किया जाना चाहिए:

लाइफ़साइकल मेथड गतिविधि पूरी होने की प्रोसेस में इसे कहां शुरू किया गया लाइफ़साइकल के किस तरीके के बाद शुरू किया गया
onConfigurationChanged() यह तब लागू होता है, जब यूज़र इंटरफ़ेस (यूआई) फ़ोरग्राउंड में हो और कॉन्फ़िगरेशन में बदलाव हो. हमेशा onStart() के बाद
onTrimMemory() यह तब ट्रिगर होता है, जब कोई गतिविधि बैकग्राउंड में चल रही हो. हमेशा onPause() के बाद
onSaveInstance() किसी गतिविधि के खत्म होने से पहले शुरू किया जाता है. हमेशा onStop() के बाद

लाइफ़साइकल के इन तरीकों को कई बार कॉल न करें. इसके लिए, पहले इनसे जुड़े क्लोज़िंग तरीके को कॉल करें. इसके अलावा, ध्यान रखें कि अगर इनमें से कुछ Android लाइफ़साइकल कॉलबैक को ऐप्लिकेशन खुद मैनेज करता है और NavigationView को फ़्रैगमेंट बनाने या शुरू करने के बाद जोड़ा जाता है, तो ऐप्लिकेशन को Navigation SDK टूल को सही तरीके से शुरू करने के लिए, खास तरीकों को सही क्रम में कॉल करना चाहिए.

इन तरीकों को इस्तेमाल करने के बारे में ज़्यादा जानकारी के लिए, Navigation SDK का डेमो ऐप्लिकेशन देखें.

NavigationView का इस्तेमाल करते समय, लाइफ़साइकल इवेंट को गतिविधि या फ़्रैगमेंट से शुरू करें, दोनों से नहीं

लाइफ़साइकल के तरीकों के क्रम को बनाए रखने के लिए, इन इवेंट को गतिविधि या फ़्रैगमेंट लाइफ़साइकल कॉलबैक से शुरू करें. ये कॉलबैक, इन इवेंट को क्रम से रिसीव करते हैं. इस तरीके से यह पक्का होता है कि ऐप्लिकेशन को फ़्रैगमेंट और गतिविधियों के बीच तालमेल बिठाने की ज़रूरत नहीं पड़ती. साथ ही, डुप्लीकेट कॉल नहीं होते.

SupportNavigationFragment से NavigationFragment पर अपडेट करें

Navigation SDK के v8.0.0 वर्शन से, NavigationFragment को SupportNavigationFragment की जगह इस्तेमाल किया जा रहा है. SupportNavigationFragment को अब बंद कर दिया गया है. NavigationFragment, रास्ते के दिशा-निर्देश और मैप डिसप्ले के लिए स्टैंडर्ड फ़्रैगमेंट कंटेनर है.

NavigationFragment, SupportNavigationFragment के साथ पूरी तरह से एपीआई समानता बनाए रखता है. अपने ऐप्लिकेशन को अपडेट करने के लिए, एक्सएमएल लेआउट फ़ाइलों और सोर्स कोड इंपोर्ट में, SupportNavigationFragment को NavigationFragment से बदलें. सभी मेथड सिग्नेचर और getSupportFragmentManager() कॉल पहले जैसे ही रहेंगे.

लेआउट एक्सएमएल को अपडेट करना

अपने लेआउट की एक्सएमएल फ़ाइलों में, SupportNavigationFragment को NavigationFragment से बदलें:

पहले (v7.x और इससे पहले के वर्शन):

<fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/navigation_fragment"
    android:name="com.google.android.libraries.navigation.SupportNavigationFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

v8.0.0 और इसके बाद के वर्शन के लिए:

<fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/navigation_fragment"
    android:name="com.google.android.libraries.navigation.NavigationFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

अगर आपका ऐप्लिकेशन FragmentContainerView का इस्तेमाल करता है (फ़्रैगमेंट होस्ट करने के लिए सुझाया गया है), तो android:name एट्रिब्यूट को अपडेट करें:

<androidx.fragment.app.FragmentContainerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/navigation_fragment"
    android:name="com.google.android.libraries.navigation.NavigationFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

ऐप्लिकेशन कोड अपडेट करना

अपने Java या Kotlin कोड में, इंपोर्ट और क्लास कास्ट को बदलें. दोनों क्लास androidx.fragment.app.Fragment को एक्सटेंड करती हैं. इसलिए, फ़्रैगमेंट को खोजने के लिए getSupportFragmentManager() का इस्तेमाल जारी रखें:

पहले (v7.x और इससे पहले के वर्शन):

Java

import com.google.android.libraries.navigation.SupportNavigationFragment;

public class MainActivity extends AppCompatActivity {
  private SupportNavigationFragment mNavFragment;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mNavFragment = (SupportNavigationFragment) getSupportFragmentManager()
        .findFragmentById(R.id.navigation_fragment);
  }
}
    

Kotlin

import com.google.android.libraries.navigation.SupportNavigationFragment

class MainActivity : AppCompatActivity() {
  private lateinit var navFragment: SupportNavigationFragment

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    navFragment = supportFragmentManager
        .findFragmentById(R.id.navigation_fragment) as SupportNavigationFragment
  }
}
    

v8.0.0 और इसके बाद के वर्शन के लिए:

Java

import com.google.android.libraries.navigation.NavigationFragment;

public class MainActivity extends AppCompatActivity {
  private NavigationFragment mNavFragment;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mNavFragment = (NavigationFragment) getSupportFragmentManager()
        .findFragmentById(R.id.navigation_fragment);
  }
}
    

Kotlin

import com.google.android.libraries.navigation.NavigationFragment

class MainActivity : AppCompatActivity() {
  private lateinit var navFragment: NavigationFragment

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    navFragment = supportFragmentManager
        .findFragmentById(R.id.navigation_fragment) as NavigationFragment
  }
}
    

एपीआई पैरिटी

आपको अपने कोड में कोई अन्य बदलाव करने या उसे फिर से व्यवस्थित करने की ज़रूरत नहीं है. NavigationFragment, SupportNavigationFragment के सभी सार्वजनिक तरीकों, लिसनर इंटरफ़ेस, और कस्टम यूज़र इंटरफ़ेस (यूआई) कंट्रोल के साथ काम करता है. इसके लिए, वह एक जैसे सिग्नेचर वाले तरीकों का इस्तेमाल करता है. इनमें getMapAsync(), getNavigator(), setEtaCardEnabled(), और setStylingOptions() शामिल हैं.