Gezinme bileşeni bir NavigationUI
içerir
sınıfını kullanır. Bu sınıf, üst tarafta gezinmeyi yöneten statik yöntemler içeriyor
uygulama çubuğu, gezinme çekmecesi ve alt gezinme bölümü.
Üst uygulama çubuğu
Uygulamanın üst çubuğu uygulamanızın üst tarafında bilgilerin görüntülenmesi için tutarlı bir yer sağlar ve işlemleri geçerli ekrandan izleyin.
![üst uygulama çubuğunun gösterildiği ekran](https://developer.android.com/static/topic/libraries/architecture/images/top-app-bar.png?authuser=19&hl=tr)
NavigationUI
, üst kısımlardaki içerikleri otomatik olarak güncelleyen yöntemler içerir.
uygulama çubuğunu kullanın. Örneğin, NavigationUI
,
en iyi uygulamanın başlığını korumak için gezinme grafiğinizden hedef etiketleri
ve çubuğu güncel tutun.
<navigation> <fragment ... android:label="Page title"> ... </fragment> </navigation>
Aşağıda açıklanan üst uygulama çubuğu uygulamalarıyla NavigationUI
kullanılırken
hedeflere eklediğiniz etiket, hedeften otomatik olarak doldurulabilir
{argName}
etiket.
NavigationUI
, aşağıdaki en popüler uygulama çubuğu türlerini destekler:
Uygulama çubukları hakkında daha fazla bilgi için Uygulama çubuğunu ayarlama bölümüne bakın.
AppBarYapılandırması
NavigationUI
bir AppBarConfiguration
kullanıyor
sol üst köşedeki Gezinme düğmesinin davranışını yönetmeye yarayan nesne
bir alanı olabilir. Navigasyon düğmesinin çalışma biçimi,
Kullanıcının üst düzey bir hedefte olup olmadığına bağlıdır.
Üst düzey hedef, bir dizi hedefin kök veya en üst seviyedeki hedeftir. ve hiyerarşik olarak bağlantılı hedeflerdir. Üst düzey hedeflerde Daha üst düzeyde bir hedef olmadığı için üst uygulama çubuğunda yukarı düğmesi. Ölçüt uygulamanızın başlangıç hedefi üst düzey tek hedeftir.
Kullanıcı üst düzey bir hedefe geldiğinde, Navigasyon düğmesi
çekmece simgesi
.
hedef bir
DrawerLayout
kullanıyorsa. Hedefte bir
DrawerLayout
, Gezinme düğmesi gizlendi. Kullanıcı başka bir hedefte olduğunda, Navigasyon düğmesi bir Yukarı düğmesi olarak görünür
Navigasyon düğmesini,
en üst düzeydeki hedef,
AppBarConfiguration
nesnesi oluşturun ve aşağıda gösterildiği gibi ilgili gezinme grafiğini geçin:
Kotlin
val appBarConfiguration = AppBarConfiguration(navController.graph)
Java
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(navController.getGraph()).build();
Bazı durumlarda, bunun yerine birden fazla üst düzey hedef tanımlamanız gerekebilir
başlangıç hedefini kullanın. BottomNavigationView
kullanımı
Buna, uyumlu olmayan kardeş ekranların kullanıldığı durumlar için
birbirleriyle hiyerarşik olarak ilişkilidir ve her biri kendine özgü ilişkili
hedefler. Bu gibi durumlarda, hedef URL yerine bir hedef
Aşağıda gösterildiği gibi, kurucuya verilen kimlikler:
Kotlin
val appBarConfiguration = AppBarConfiguration(setOf(R.id.main, R.id.profile))
Java
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(R.id.main, R.id.profile).build();
Araç Çubuğu oluşturma
NavigationUI
ile bir Araç Çubuğu oluşturmak için önce ana
etkinlik, gösterildiği gibi:
<LinearLayout> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" /> <androidx.fragment.app.FragmentContainerView android:id="@+id/nav_host_fragment" ... /> ... </LinearLayout>
Sonra setupWithNavController()
numaralı telefonu arayın
aşağıda gösterildiği gibi ana etkinliğinizin onCreate()
yönteminden
örnek:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { setContentView(R.layout.activity_main) ... val navController = findNavController(R.id.nav_host_fragment) val appBarConfiguration = AppBarConfiguration(navController.graph) findViewById<Toolbar>(R.id.toolbar) .setupWithNavController(navController, appBarConfiguration) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_main); ... NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(navController.getGraph()).build(); Toolbar toolbar = findViewById(R.id.toolbar); NavigationUI.setupWithNavController( toolbar, navController, appBarConfiguration); }
Gezinme düğmesini herkes için Yukarı düğmesi olarak görünecek şekilde yapılandırmak
üst düzey URL'leriniz için boş bir hedef kimliği kümesi iletin.
AppBarConfiguration
oluşturun. Faydalı olabilir
bir Yukarı düğmesi göstermesi gereken ikinci bir etkinliğiniz varsa,
tüm hedeflerdeki Toolbar
içinde. Bu, kullanıcının geri gitmesine olanak tanır.
arkada başka hedef olmadığında ana etkinliğe
yığını. Tekliflerinizi otomatikleştirmek ve optimize etmek için
setFallbackOnNavigateUpListener()
Böylece, navigateUp()
aksi takdirde bu işlemi yaptığında yedek davranışı kontrol etmek için
aşağıdaki örnekte gösterildiği gibi hiçbir şey yapmama:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { ... val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment val navController = navHostFragment.navController val appBarConfiguration = AppBarConfiguration( topLevelDestinationIds = setOf(), fallbackOnNavigateUpListener = ::onSupportNavigateUp ) findViewById<Toolbar>(R.id.toolbar) .setupWithNavController(navController, appBarConfiguration) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { ... NavHostFragment navHostFragment = (NavHostFragment) supportFragmentManager.findFragmentById(R.id.nav_host_fragment); NavController navController = navHostFragment.getNavController(); AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder() .setFallbackOnNavigateUpListener(::onSupportNavigateUp) .build(); Toolbar toolbar = findViewById(R.id.toolbar); NavigationUI.setupWithNavController( toolbar, navController, appBarConfiguration); }
DaraltmaAraç ÇubuğuDüzenini Dahil Et
Araç Çubuğunuza CollapsingToolbarLayout
eklemek için önce
Aşağıda gösterildiği gibi, etkinliğinizdeki araç çubuğu ve etrafındaki düzen:
<LinearLayout> <com.google.android.material.appbar.AppBarLayout android:layout_width="match_parent" android:layout_height="@dimen/tall_toolbar_height"> <com.google.android.material.appbar.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar_layout" android:layout_width="match_parent" android:layout_height="match_parent" app:contentScrim="?attr/colorPrimary" app:expandedTitleGravity="top" app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin"/> </com.google.android.material.appbar.CollapsingToolbarLayout> </com.google.android.material.appbar.AppBarLayout> <androidx.fragment.app.FragmentContainerView android:id="@+id/nav_host_fragment" ... /> ... </LinearLayout>
Sonra setupWithNavController()
numaralı telefonu arayın
aşağıda gösterildiği gibi ana etkinliğinizin onCreate
yönteminden:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { setContentView(R.layout.activity_main) ... val layout = findViewById<CollapsingToolbarLayout>(R.id.collapsing_toolbar_layout) val toolbar = findViewById<Toolbar>(R.id.toolbar) val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment val navController = navHostFragment.navController val appBarConfiguration = AppBarConfiguration(navController.graph) layout.setupWithNavController(toolbar, navController, appBarConfiguration) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_main); ... CollapsingToolbarLayout layout = findViewById(R.id.collapsing_toolbar_layout); Toolbar toolbar = findViewById(R.id.toolbar); NavHostFragment navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment); NavController navController = navHostFragment.getNavController(); AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(navController.getGraph()).build(); NavigationUI.setupWithNavController(layout, toolbar, navController, appBarConfiguration); }
İşlem çubuğu
Varsayılan işlem çubuğuna gezinme desteği eklemek için şu çağrıyı yapın:
setupActionBarWithNavController()
aşağıda gösterildiği gibi ana etkinliğinizin onCreate()
yönteminden. Lütfen
AppBarConfiguration
beyan etme işlemini onCreate()
dışında yapmanız gerekir.
onSupportNavigateUp()
öğesini geçersiz kılarken de kullanın:
Kotlin
private lateinit var appBarConfiguration: AppBarConfiguration ... override fun onCreate(savedInstanceState: Bundle?) { ... val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment val navController = navHostFragment.navController appBarConfiguration = AppBarConfiguration(navController.graph) setupActionBarWithNavController(navController, appBarConfiguration) }
Java
AppBarConfiguration appBarConfiguration; ... @Override protected void onCreate(Bundle savedInstanceState) { ... NavHostFragment navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment); NavController navController = navHostFragment.getNavController(); appBarConfiguration = new AppBarConfiguration.Builder(navController.getGraph()).build(); NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration); }
Ardından, yukarı gezinmeyi işlemek için onSupportNavigateUp()
öğesini geçersiz kılın:
Kotlin
override fun onSupportNavigateUp(): Boolean { val navController = findNavController(R.id.nav_host_fragment) return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp() }
Java
@Override public boolean onSupportNavigateUp() { NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); return NavigationUI.navigateUp(navController, appBarConfiguration) || super.onSupportNavigateUp(); }
Uygulama çubuğu varyasyonlarını destekleme
Etkinliğinize üst uygulama çubuğunu eklemek, uygulama çubuğunun düzeni şu şekilde olduğunda iyi sonuç verir: benzer olması gerekir. Ancak üst uygulama çubuğunuz değişirse farklı hedeflerde, üstteki uygulama çubuğunu her bir hedef parçada tanımlamanızı öneririz.
Örneğin, hedeflerinizden birinde standart bir Toolbar
kullanılırken
diğerinde ise sekmeler içeren daha karmaşık bir uygulama çubuğu oluşturmak için AppBarLayout
kullanılıyor.
Şekil 2'de gösterilmiştir.
![en iyi iki uygulama çubuğu varyasyonu var; sol tarafta standart bir araç çubuğu ve
sağ tarafta araç çubuğu ve sekmeler içeren appbarlayout](https://developer.android.com/static/images/guide/navigation/app-bar-variations.png?authuser=19&hl=tr)
Toolbar
Sağda, bir AppBarLayout
Toolbar
ve sekmeler.Bu örneği
NavigationUI
, önce parça düzenlerinizin her birinde uygulama çubuğunu tanımlayın,
standart bir araç çubuğu kullanan hedef parçayla başlayarak:
<LinearLayout>
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
... />
...
</LinearLayout>
Daha sonra, sekmeler içeren bir uygulama çubuğunu kullanan hedef parçayı tanımlayın:
<LinearLayout>
<com.google.android.material.appbar.AppBarLayout
... />
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
... />
<com.google.android.material.tabs.TabLayout
... />
</com.google.android.material.appbar.AppBarLayout>
...
</LinearLayout>
Gezinme yapılandırma mantığı bu parçaların her ikisi için de aynıdır:
yalnızca
setupWithNavController()
işlemini başlatmak yerine her parçanın onViewCreated()
yöntemi içinden
etkili olabilir:
Kotlin
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { val navController = findNavController() val appBarConfiguration = AppBarConfiguration(navController.graph) view.findViewById<Toolbar>(R.id.toolbar) .setupWithNavController(navController, appBarConfiguration) }
Java
@Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { NavController navController = Navigation.findNavController(view); AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(navController.getGraph()).build(); Toolbar toolbar = view.findViewById(R.id.toolbar); NavigationUI.setupWithNavController( toolbar, navController, appBarConfiguration); }
Hedefleri menü öğelerine bağlayın
NavigationUI
, hedefleri menü tabanlı kullanıcı arayüzüne bağlamak için de yardımcılar sağlar.
bileşenlerine ayıralım. NavigationUI
, yardımcı bir yöntem içerir.
onNavDestinationSelected()
,
ile birlikte MenuItem
barındıran NavController
ilişkilendirilmiş hedeftir. MenuItem
içindeki id
, id
ile eşleşiyorsa
sonra, NavController
söz konusu hedefe gidebilir.
Örneğin, aşağıdaki XML snippet'leri bir menü öğesini ve
ortak id
, details_page_fragment
:
<?xml version="1.0" encoding="utf-8"?> <navigation xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android" ... > ... <fragment android:id="@+id/details_page_fragment" android:label="@string/details" android:name="com.example.android.myapp.DetailsFragment" /> </navigation>
<menu xmlns:android="http://schemas.android.com/apk/res/android"> ... <item android:id="@+id/details_page_fragment" android:icon="@drawable/ic_details" android:title="@string/details" /> </menu>
Örneğin, menünüz Aktivitenin onCreateOptionsMenu()
özelliği aracılığıyla eklendiyse
Etkinlik'in varsayılan ayarını geçersiz kılarak menü öğelerini hedeflerle ilişkilendirebilirsiniz.
onNavDestinationSelected()
hattını aramak için onOptionsItemSelected()
aşağıdaki örneği inceleyin:
Kotlin
override fun onOptionsItemSelected(item: MenuItem): Boolean { val navController = findNavController(R.id.nav_host_fragment) return item.onNavDestinationSelected(navController) || super.onOptionsItemSelected(item) }
Java
@Override public boolean onOptionsItemSelected(MenuItem item) { NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); return NavigationUI.onNavDestinationSelected(item, navController) || super.onOptionsItemSelected(item); }
Artık kullanıcı details_page_fragment
menü öğesini tıkladığında, uygulama
otomatik olarak aynı id
ile karşılık gelen hedefe gider.
Gezinme çekmecesi ekle
Gezinme çekmecesi, uygulamanızın ana gezinme menüsünü gösteren kullanıcı arayüzü panelidir.
Kullanıcı, çekmece simgesine dokunduğunda çekmece görünür
.
veya kullanıcı parmağını ekranın sol kenarından kaydırdığında da
tıklayın.
![gezinme menüsünün gösterildiği açık bir çekmece](https://developer.android.com/static/images/topic/libraries/architecture/navigation-drawer.png?authuser=19&hl=tr)
Çekmece simgesi,
DrawerLayout
kullanan üst düzey hedefler.
Gezinme çekmecesi eklemek için önce bir
Kök olarak DrawerLayout
görünüm. DrawerLayout
içinde ana kullanıcı arayüzü içeriği için bir düzen ekleyin ve
içeriklerini barındıran başka bir görünüm oluşturabilirsiniz.
Örneğin, şu düzende iki alt görünüme sahip bir DrawerLayout
kullanılmıştır:
NavHostFragment
yerine
ana içeriği ve bir
NavigationView
gezinme çekmecesinin içeriği hakkında daha fazla bilgi edinin.
<?xml version="1.0" encoding="utf-8"?>
<!-- Use DrawerLayout as root container for activity -->
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<!-- Layout to contain contents of main body of screen (drawer will slide over this) -->
<androidx.fragment.app.FragmentContainerView
android:name="androidx.navigation.fragment.NavHostFragment"
android:id="@+id/nav_host_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph" />
<!-- Container for contents of drawer - use NavigationView to make configuration easier -->
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true" />
</androidx.drawerlayout.widget.DrawerLayout>
Ardından, DrawerLayout
cihazını bağlayın
aşağıdaki şekilde gösterildiği gibi, AppBarConfiguration
öğesine geçirerek gezinme grafiğinize
aşağıdaki örneği inceleyin:
Kotlin
val appBarConfiguration = AppBarConfiguration(navController.graph, drawerLayout)
Java
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(navController.getGraph()) .setDrawerLayout(drawerLayout) .build();
Sonra, ana etkinlik sınıfınızda şunu arayın:
setupWithNavController()
aşağıda gösterildiği gibi ana etkinliğinizin onCreate()
yönteminden:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { setContentView(R.layout.activity_main) ... val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment val navController = navHostFragment.navController findViewById<NavigationView>(R.id.nav_view) .setupWithNavController(navController) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_main); ... NavHostFragment navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment); NavController navController = navHostFragment.getNavController(); NavigationView navView = findViewById(R.id.nav_view); NavigationUI.setupWithNavController(navView, navController); }
Başlamak için kalan süre:
Gezinme 2.4.0-alpha01,
her menü öğesinin durumu kaydedilir ve geri yüklenir.
setupWithNavController
.
Alt gezinme
NavigationUI
, alt gezinmeyi de işleyebilir. Kullanıcı bir menü seçtiğinde
öğesi, NavController
çağrısı
onNavDestinationSelected()
ve alt gezinme çubuğunda seçili öğeyi otomatik olarak günceller.
![alt gezinme çubuğu](https://developer.android.com/static/topic/libraries/architecture/images/bottom-navigation.png?authuser=19&hl=tr)
Uygulamanızda bir alt gezinme çubuğu oluşturmak için öncelikle ana aşağıda gösterildiği gibi:
<LinearLayout> ... <androidx.fragment.app.FragmentContainerView android:id="@+id/nav_host_fragment" ... /> <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bottom_nav" app:menu="@menu/menu_bottom_nav" /> </LinearLayout>
Sonra, ana etkinlik sınıfınızda şunu arayın:
setupWithNavController()
aşağıda gösterildiği gibi ana etkinliğinizin onCreate()
yönteminden:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { setContentView(R.layout.activity_main) ... val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment val navController = navHostFragment.navController findViewById<BottomNavigationView>(R.id.bottom_nav) .setupWithNavController(navController) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_main); ... NavHostFragment navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment); NavController navController = navHostFragment.getNavController(); BottomNavigationView bottomNav = findViewById(R.id.bottom_nav); NavigationUI.setupWithNavController(bottomNav, navController); }
Başlamak için kalan süre:
Gezinme 2.4.0-alpha01,
her menü öğesinin durumu kaydedilir ve geri yüklenir.
setupWithNavController
.
Alt gezinmeyi içeren kapsamlı bir örnek için Android Mimari Bileşenleri Gelişmiş Gezinme Örneği bulabilirsiniz.
Navigasyon etkinliklerini dinle
NavController
ile etkileşimde bulunma
, hedefler arasında gezinmenin birincil yöntemidir. NavController
NavHost
içeriğinin değiştirilmesinden sorumludur
yeni hedef ile uyumlu. Çoğu durumda, kullanıcı arayüzü öğeleri (ör. üst uygulama çubuğu veya
BottomNavigationBar
gibi diğer kalıcı gezinme denetimleri
özellikleri NavHost
ve hedefler arasında gezindikçe güncellenmesi gerekir.
NavController
, kullanımı kolay bir OnDestinationChangedListener
arayüzü sunar.
NavController
öğesinin geçerli hedefi olduğunda çağrılır
veya bağımsız değişkenlerinin değişmesidir. Yeni bir dinleyici eklemek için
addOnDestinationChangedListener()
yöntemidir. addOnDestinationChangedListener()
numaralı telefonu ararken,
dinleyicinize hemen gönderilir.
NavigationUI
, bu ortak kullanıcı arayüzünü oluşturmak için OnDestinationChangedListener
kullanıyor
gezinme özelliklerine duyarlıdır. Ancak şunu da kullanabilirsiniz:
OnDestinationChangedListener
kendi başına kullanarak özel bir kullanıcı arayüzü veya işletme oluşturabilirsiniz
gezinme etkinliklerinin mantığa göre hareket etmesini sağlar.
Örneğin, istediğiniz bir dizide kullanılabilecek ortak kullanıcı arayüzü öğeleri
uygulamanızın bazı alanlarında gizleyebilirsiniz. Kendinizinkini kullanma
OnDestinationChangedListener
, bu kullanıcı arayüzünü seçerek gösterebilir veya gizleyebilirsiniz
öğeleri, aşağıdaki örnekte gösterildiği gibi, hedef hedefe göre belirlenir:
Kotlin
navController.addOnDestinationChangedListener { _, destination, _ -> if(destination.id == R.id.full_screen_destination) { toolbar.visibility = View.GONE bottomNavigationView.visibility = View.GONE } else { toolbar.visibility = View.VISIBLE bottomNavigationView.visibility = View.VISIBLE } }
Java
navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() { @Override public void onDestinationChanged(@NonNull NavController controller, @NonNull NavDestination destination, @Nullable Bundle arguments) { if(destination.getId() == R.id.full_screen_destination) { toolbar.setVisibility(View.GONE); bottomNavigationView.setVisibility(View.GONE); } else { toolbar.setVisibility(View.VISIBLE); bottomNavigationView.setVisibility(View.VISIBLE); } } });
Bağımsız değişkene dayalı işleyiciler
Alternatif olarak,
uygun kullanıcı arayüzü denetleyicisi tarafından kullanılabilen gezinme grafiği
işaretini tıklayın. Örneğin, mantığını ana makineye dayandırmak yerine,
Öncekine göre hedef kimliğinde OnDestinationChangedListener
Örneğin, NavGraph
içinde bağımsız değişken oluşturabiliriz:
<?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/navigation\_graph" app:startDestination="@id/fragmentOne"> <fragment android:id="@+id/fragmentOne" android:name="com.example.android.navigation.FragmentOne" android:label="FragmentOne"> <action android:id="@+id/action\_fragmentOne\_to\_fragmentTwo" app:destination="@id/fragmentTwo" /> </fragment> <fragment android:id="@+id/fragmentTwo" android:name="com.example.android.navigation.FragmentTwo" android:label="FragmentTwo"> <argument android:name="ShowAppBar" android:defaultValue="true" /> </fragment> </navigation>
Bu bağımsız değişken şu durumlarda kullanılmaz:
hedefe gitmek için
kullanarak hedefe ek bilgi eklemek için
defaultValue
. Bu örnekte, değer uygulama çubuğunun
bu hedefte olduğunda gösterilecek.
Artık Activity
bölümüne bir OnDestinationChangedListener
ekleyebiliriz:
Kotlin
navController.addOnDestinationChangedListener { _, _, arguments -> appBar.isVisible = arguments?.getBoolean("ShowAppBar", false) == true }
Java
navController.addOnDestinationChangedListener( new NavController.OnDestinationChangedListener() { @Override public void onDestinationChanged( @NonNull NavController controller, @NonNull NavDestination destination, @Nullable Bundle arguments ) { boolean showAppBar = false; if (arguments != null) { showAppBar = arguments.getBoolean("ShowAppBar", false); } if(showAppBar) { appBar.setVisibility(View.VISIBLE); } else { appBar.setVisibility(View.GONE); } } } );
NavController
, gezinme hedefi her değiştiğinde bu geri çağırmayı çağırır. İlgili içeriği oluşturmak için kullanılan
Activity
artık kullanıcı arayüzü bileşenlerinin durumunu veya görünürlüğünü güncelleyebilir
alınan bağımsız değişkenlere göre sahip olduğu anlamına gelir.
Bu yaklaşımın avantajlarından biri, Activity
yalnızca
gezinme grafiğinde bağımsız değişkenler kullanıyor ve Fragment
bağımsız özelliğini tanımıyor
ve sorumluluklardan bahsettik. Benzer bir şekilde, parçalar da
içeren Activity
ve sahip olduğu kullanıcı arayüzü bileşenleri hakkında.
Ek kaynaklar
Gezinme hakkında daha fazla bilgi edinmek için aşağıdaki ek kaynaklara göz atın.
Örnekler
Codelab'ler
Blog yayınları
Videolar
- Tek Bir Etkinliğe Geçiş Yapmak İçin En İyi 10 Uygulama
- Tek Etkinlik: Neden, Ne Zaman ve Nasıl (Android Dev Summit '18)
- Android Jetpack: Gezinme Denetleyicisi ile kullanıcı arayüzünde gezinmeyi yönetme (Google I/O '18)