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.