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ğırmalarını otomatik olarak işler. Bu nedenle, bunları kendiniz yönetmeniz gerekmez. Bu yaklaşımda hata olasılığı daha düşüktür ve uygulamanızda gezinmeyi kullanmak için önerilen yöntemdir. NavigationFragment kullanırken NavigationView yaşam döngüsü etkinliklerini 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ına ev sahipliği yapar ve yaşam döngüsü etkinliklerini Android etkinlikleri ve parçaları olarak yakından takip eder. Bu yaşam döngüsü etkinlikleri çağrıldığında belirli işlemler gerçekleştirir. NavigationView, NavigationView#onCreate ve NavigationView#onStart üzerinde birden fazla başlatma, NavigationView#onStop ve NavigationView#onDestroy üzerinde temizleme işlemlerinin yanı sıra diğer yaşam döngüsü etkinlikleri işlenirken de gerçekleştirir.

NavigationView yaşam döngüsü yöntemleri, Android etkinlikleri veya parçaları için olduğu gibi aynı anlama gelir. Örneğin, onCreate NavigationView kabaca şu şekilde çevrilir ve Android etkinliğindeki veya parçadaki yaşam döngüsü geri çağırmaları 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öntemlerine dayandığından ve aynı sırada çağrıldığından, bu NavigationView yöntemlerin kesin bir sırayla çağrılması 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ünde nerede çağrılır? Hangi yaşam döngüsü yönteminden sonra çağrılır?
onConfigurationChanged() Kullanıcı arayüzü ön planda olduğunda ve yapılandırma değiştiğinde çağrılır. Her zaman onStart() tarihinden sonra
onTrimMemory() Bir etkinlik arka planda olduğunda çağrılır. Her zaman onPause() tarihinden sonra
onSaveInstance() Bir etkinlik yok edilmeden önce çağrılır. Her zaman sonra onStop()

Bu yaşam döngüsü yöntemlerini, önce ilgili kapatma yöntemini çağırmadan birden çok kez çağırmayın. Ayrıca, bu Android yaşam döngüsü geri çağırmalarından 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 başlatmak için belirli yöntemleri uygun sırada çağırması gerektiğini unutmayın.

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

NavigationView kullanıyorsanız yaşam döngüsü etkinliklerini hem etkinlikten hem de parçadan değil, yalnızca birinden çağırın.

Yaşam döngüsü yöntemlerinin katı sıralamasını korumak için bu etkinlikleri, bu etkinlikleri sırayla alan etkinlik veya parça yaşam döngüsü geri çağırmalarından ç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 v8.0.0'dan itibaren, adım adım navigasyon ve harita görüntüleme için standart parça kapsayıcısı olarak NavigationFragment, kullanımdan kaldırılan SupportNavigationFragment yerine kullanılacak.

NavigationFragment ile tam API eşliği sağlanır SupportNavigationFragment. Uygulamanızı güncellemek için XML düzen dosyalarınızda ve kaynak kodu içe aktarmalarınızda SupportNavigationFragment öğesini NavigationFragment ile değiştirin. Tüm yöntem imzaları ve getSupportFragmentManager() çağrıları aynı kalır.

Düzen XML'sini güncelleme

Düzeninizdeki SupportNavigationFragment öğesini NavigationFragment ile değiştirin. XML dosyaları:

Önce (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 aktarma işlemlerini ve sınıf yayınlarını değiştirin. Her iki sınıf da androidx.fragment.app.Fragment sınıfını genişlettiğinden parçayı aramak için getSupportFragmentManager() kullanmaya devam edin:

Önce (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şliği

Başka 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.