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

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

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

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

अगर NavigationView का इस्तेमाल किया जा रहा है, तो लाइफ़साइकल के तरीकों को लागू करते समय, क्रम से लागू करने के नियम का पालन करें

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

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

Android ऐक्टिविटी के लाइफ़साइकल के बारे में ज़्यादा जानने के लिए, Android डेवलपर के दस्तावेज़ में ऐक्टिविटी के लाइफ़साइकल से जुड़े कॉन्सेप्ट सेक्शन देखें.

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

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

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

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

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

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

SupportNavigationFragment से NavigationFragment में अपडेट करना

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

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

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

अपने लेआउट की XML फ़ाइलों में, 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() शामिल हैं) इस्तेमाल किए जाते हैं.