Navigasyon haritası etkileşimiyle ilgili en iyi uygulamalar

Bu sayfada, uygulamanızdaki Gezinme haritasıyla etkileşim kurmaya yönelik en iyi uygulamalar açıklanmaktadır.

Mümkün olduğunda NavigationView yerine NavigationFragment kullanın.

NavigationFragment, NavigationView öğesini sarmalar ve yaşam döngüsü geri çağırma yöntemlerini otomatik olarak işler. Bu nedenle, bunları kendiniz yönetmeniz gerekmez. Bu yaklaşım, hataya daha az açık olup uygulamanızda navigasyonu kullanmanın önerilen yoludur. NavigationFragment kullanırken NavigationView yaşam döngüsü olaylarını doğrudan çağırmayın.

NavigationView kullanıyorsanız yaşam döngüsü yöntemlerini çağırırken katı sıralama kullanın.

NavigationView, Gezinme haritasını barındırır ve yaşam döngüsü olaylarını Android etkinlikleri ve parçaları olarak yakından takip eder. Bu yaşam döngüsü olayları çağrıldığında belirli işlemler yapar. NavigationView, NavigationView#onCreate ve NavigationView#onStart üzerinde birden fazla başlatma işlemi, NavigationView#onStop ve NavigationView#onDestroy üzerinde temizleme işlemleri ve diğer yaşam döngüsü olayları işlendiğinde de işlemler yürütür.

NavigationView yaşam döngüsü yöntemleri, Android etkinlikleri veya parçalarıyla aynı anlama sahiptir. Örneğin, NavigationView için onCreate, kabaca şu şekilde çevrilir ve Android etkinliğinden veya parçasından yaşam döngüsü geri çağırma yöntemleri tarafından çağrılmalıdır. NavigationView yaşam döngüsü geri çağırma yöntemleri, Android yaşam döngüsü geri çağırma yöntemlerini temel aldığı ve aynı sırayla çağrıldığı için bu NavigationView yöntemlerinin katı bir şekilde sıralanması gerekir. Aksi takdirde bellek sızıntıları, kullanıcı arayüzü hataları, konumun güncellenmemesi ve başka sorunlar yaşayabilirsiniz.

Android etkinlik yaşam döngüsü hakkında daha fazla bilgi için Android geliştirici belgelerindeki Etkinlik yaşam döngüsü kavramları bölümüne bakın.

Aşağıdaki tabloda, belirtilen yaşam döngüsü yöntemlerinden sonra diğer yaşam döngüsü yöntemlerinin ne zaman çağrılması gerektiği gösterilmektedir:

Yaşam döngüsü yöntemi Etkinlik yaşam döngüsünün neresinde çağrılır? Hangi yaşam döngüsü yönteminden sonra çağrılır?
onConfigurationChanged() Kullanıcı arayüzü ön plandayken ve yapılandırma değiştiğinde çağrılır. Her zaman onStart() tarihinden sonra
onTrimMemory() Bir etkinlik arka plandayken çağrılır. Her zaman onPause() tarihinden sonra
onSaveInstance() Bir etkinlik yok edilmeden önce çağrılır. Her zaman sonra onStop()

Önce ilgili kapatma yöntemini çağırmadan bu yaşam döngüsü yöntemlerini birden çok kez çağırmayın. Ayrıca, bu Android yaşam döngüsü geri çağırma yöntemlerinden bazıları uygulamanın kendisi tarafından yönetiliyorsa ve NavigationView, oluşturma veya başlatma işleminden sonra parçaya ekleniyorsa uygulamanın, Navigation SDK'yı doğru şekilde ilk kullanıma hazırlamak için belirli yöntemleri doğru sırayla çağırması gerektiğini unutmayın.

Bu yöntemlerin kullanımıyla ilgili daha fazla bilgi için Navigation SDK demo uygulamasına bakın.

NavigationView kullanıyorsanız yaşam döngüsü olaylarını etkinlikten veya parçadan çağırın (ikisini birden kullanmayın).

Yaşam döngüsü yöntemlerinin katı sıralamasını korumak için bu etkinlikleri, etkinlikleri sırayla alan etkinlik veya parça yaşam döngüsü geri çağırma yöntemlerinden çağırın. Bu yaklaşım, uygulamaların parçalar ve etkinlikler arasında koordinasyon sağlamasına ve yinelenen çağrılara neden olmasına gerek kalmamasını sağlar.

SupportNavigationFragment sürümünden NavigationFragment sürümüne güncelleme

Navigation SDK 8.0.0 sürümünden itibaren NavigationFragment, adım adım rota ve harita görüntüleme için standart parça kapsayıcısı olarak desteği sonlandırılan SupportNavigationFragment sınıfının yerini alır.

NavigationFragment, SupportNavigationFragment ile tam API eşdeğerliğini korur. Uygulamanızı güncellemek için XML düzen dosyalarınızda ve kaynak kodu içe aktarma işlemlerinizde SupportNavigationFragment yerine NavigationFragment kullanın. Tüm yöntem imzaları ve getSupportFragmentManager() çağrıları aynı kalır.

Düzen XML'ini güncelleme

Düzen XML dosyalarınızda SupportNavigationFragment yerine NavigationFragment kullanın:

Önceki (7.x ve önceki sürümler):

<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" />

Sonra (8.0.0 ve sonraki sürümler):

<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" />

Uygulamanız FragmentContainerView kullanıyorsa (parçaları barındırmak için önerilir) android:name özelliğini güncelleyin:

<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" />

Uygulama kodunu güncelleme

Java veya Kotlin kodunuzdaki içe aktarmaları ve sınıf türü dönüşümlerini değiştirin. Her iki sınıf da androidx.fragment.app.Fragment sınıfını genişlettiği için fragment'ı aramak üzere getSupportFragmentManager() sınıfını kullanmaya devam edin:

Önceki (7.x ve önceki sürümler):

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
  }
}
    

Sonra (8.0.0 ve sonraki sürümler):

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
  }
}
    

API eşdeğerliği

Başka bir davranış değişikliği yapmanız veya kodunuzu yeniden yapılandırmanız gerekmez. NavigationFragment, SupportNavigationFragment'deki tüm herkese açık yöntemleri, dinleyici arayüzlerini ve özel kullanıcı arayüzü kontrollerini aynı yöntem imzalarıyla (getMapAsync(), getNavigator(), setEtaCardEnabled() ve setStylingOptions() dahil) destekler.