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.