Gezinme bileşeni bir NavigationUI
sınıfı içerir. Bu sınıf; üst uygulama çubuğu, gezinme çekmecesi ve alt gezinmeyle gezinmeyi yöneten statik yöntemler içerir.
Üst uygulama çubuğu
Üst uygulama çubuğu, geçerli ekrandaki bilgileri ve işlemleri görüntülemek için uygulamanızın üst kısmında tutarlı bir yer sağlar.
NavigationUI
, kullanıcılar uygulamanızda gezinirken üst uygulama çubuğunuzdaki içeriği otomatik olarak güncelleyen yöntemler içerir. Örneğin, NavigationUI
, en üstteki uygulama çubuğunun başlığını güncel tutmak için gezinme grafiğinizdeki hedef etiketlerini kullanır.
<navigation> <fragment ... android:label="Page title"> ... </fragment> </navigation>
NavigationUI
uygulamasını aşağıda açıklanan en iyi uygulama çubuğu uygulamalarıyla kullandığınızda, hedeflere eklediğiniz etiket, etiketinizde {argName}
biçimi kullanılarak hedefe sağlanan bağımsız değişkenlerden otomatik olarak doldurulabilir.
NavigationUI
aşağıdaki en iyi uygulama çubuğu türlerini destekler:
Uygulama çubukları hakkında daha fazla bilgi için Uygulama çubuğunu ayarlama başlıklı makaleyi inceleyin.
AppBarYapılandırması
NavigationUI
, uygulamanızın görüntüleme alanının sol üst köşesindeki Gezinme düğmesinin davranışını yönetmek için bir AppBarConfiguration
nesnesi kullanır. Gezinme düğmesinin davranışı, kullanıcının üst düzey bir hedefte olup olmamasına bağlı olarak değişir.
Üst düzey hedef, hiyerarşik olarak birbiriyle ilişkili bir grup hedefte bulunan kök veya en üst düzey hedeftir. Üst düzey hedeflerde, daha üst düzey hedef olmadığından üst uygulama çubuğunda Yukarı düğmesi gösterilmez. Varsayılan olarak uygulamanızın başlangıç hedefi, tek üst düzey hedeftir.
Kullanıcı üst düzey bir hedefteyken, hedef bir DrawerLayout
kullanıyorsa Gezinme düğmesi çekmece simgesine dönüşür. Hedefte DrawerLayout
kullanılmıyorsa Gezinme düğmesi gizlenir. Kullanıcı başka bir hedefin üzerindeyken, Gezinme düğmesi Yukarı düğmesi
olarak görünür.
Navigasyon düğmesini üst düzey hedef olarak yalnızca başlangıç hedefini kullanarak yapılandırmak için bir AppBarConfiguration
nesnesi oluşturun ve aşağıda gösterildiği gibi ilgili gezinme grafiğini atlayın:
Kotlin
val appBarConfiguration = AppBarConfiguration(navController.graph)
Java
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(navController.getGraph()).build();
Bazı durumlarda, varsayılan başlangıç hedefini kullanmak yerine birden fazla üst düzey hedef tanımlamanız gerekebilir. Bunun için BottomNavigationView
kullanmak yaygın bir kullanım alanıdır. Bu kullanım kapsamında, hiyerarşik olarak birbiriyle ilişkili olmayan ve her birinin kendi ilgili hedef grupları olabilir. Bunun gibi durumlarda, aşağıda gösterildiği gibi oluşturucuya bir dizi hedef kimliği aktarabilirsiniz:
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 çubuğu aşağıda gösterildiği gibi
ana etkinliğinizde tanımlayın:
<LinearLayout> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" /> <androidx.fragment.app.FragmentContainerView android:id="@+id/nav_host_fragment" ... /> ... </LinearLayout>
Ardından, aşağıdaki örnekte gösterildiği gibi ana etkinliğinizin onCreate()
yönteminden setupWithNavController()
çağırın:
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 tüm hedefler için Yukarı düğmesi olarak görünecek şekilde yapılandırmak için, AppBarConfiguration
oluştururken üst düzey hedefleriniz için boş bir hedef kimliği grubu iletin. Örneğin, tüm hedeflerdeki Toolbar
bölümünde bir Yukarı düğmesi görüntülenmesi gereken ikinci bir etkinliğiniz varsa bu yararlı olabilir. Bu, kullanıcının arka yığında başka hedef olmadığında üst etkinliğe geri gitmesine olanak tanır. Aşağıdaki örnekte gösterildiği gibi, navigateUp()
tarafından normalde hiçbir şey yapmayacağı zamanlara ait yedek davranışını kontrol etmek için setFallbackOnNavigateUpListener()
kullanabilirsiniz:
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); }
Daraltma Araç Çubuğu Düzeni Dahil Et
Araç Çubuğunuza bir CollapsingToolbarLayout
eklemek için öncelikle Araç
çubuğunu ve etkinliğinize uygun düzeni aşağıda gösterildiği gibi tanımlayın:
<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>
Ardından, aşağıda gösterildiği gibi ana etkinliğinizin onCreate
yönteminden setupWithNavController()
adlı kullanıcıyı çağırın:
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 ana etkinliğinizin onCreate()
yönteminden aşağıda gösterildiği gibi setupActionBarWithNavController()
çağrısı yapın. AppBarConfiguration
öğenizi, onSupportNavigateUp()
öğesini geçersiz kılarken de kullandığınızdan onCreate()
dışında beyan etmeniz gerektiğini unutmayı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
Üst uygulama çubuğunu etkinliğinize eklemek, uygulamanızdaki her hedef için uygulama çubuğunun düzeni benzer olduğunda iyi sonuç verir. Ancak, üst uygulama çubuğunuz hedefler arasında önemli ölçüde değişiyorsa üst uygulama çubuğunu etkinliğinizden kaldırmayı ve her bir hedef parçada tanımlamayı düşünün.
Örneğin, hedeflerinizden birinde standart bir Toolbar
, diğeri ise Şekil 2'de gösterildiği gibi sekmeler içeren daha karmaşık bir uygulama çubuğu oluşturmak için AppBarLayout
kullanabilir.
Bu örneği NavigationUI
kullanarak hedef parçalarınızda uygulamak için önce standart araç çubuğu kullanan hedef parçayla başlayarak parça düzenlerinizin her birinde uygulama çubuğunu tanımlayın:
<LinearLayout>
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
... />
...
</LinearLayout>
Ardından, sekmeler içeren bir uygulama çubuğu 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. Ancak parçaları etkinlikten başlatmak yerine her parçanın onViewCreated()
yöntemiyle setupWithNavController()
çağırmanız gerekir:
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ü odaklı kullanıcı arayüzü bileşenlerine bağlamada da yardımcılar sağlar. NavigationUI
yardımcı bir yöntem (onNavDestinationSelected()
) içerir. Bu yöntem, ilişkili hedefi barındıran NavController
ile birlikte bir MenuItem
yöntemini alır. MenuItem
öğesinin id
öğesi hedefin id
değeri ile eşleşirse NavController
bu hedefe gidebilir.
Örneğin, aşağıdaki XML snippet'leri bir menü öğesini ve ortak id
(details_page_fragment
) ile bir hedefi tanımlar:
<?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 Etkinlik'in onCreateOptionsMenu()
özelliği aracılığıyla eklendiyse aşağıdaki örnekte gösterildiği gibi, onNavDestinationSelected()
yöntemini çağırmak için Etkinlik'in onOptionsItemSelected()
değerini geçersiz kılarak menü öğelerini hedeflerle ilişkilendirebilirsiniz:
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 ilgili hedefe gidiyor.
Gezinme çekmecesi ekleme
Gezinme çekmecesi, uygulamanızın ana gezinme menüsünü gösteren bir kullanıcı arayüzü panelidir. Kullanıcı, uygulama çubuğundaki çekmece simgesine dokunduğunda veya ekranın sol kenarından bir parmağınızı kaydırdığında çekmece görüntülenir.
Çekmece simgesi, DrawerLayout
kullanan tüm üst düzey hedeflerde görüntülenir.
Gezinme çekmecesi eklemek için önce kök görünüm olarak bir DrawerLayout
bildiriminde bulunun. DrawerLayout
içinde, ana kullanıcı arayüzü içeriği için bir düzen ve gezinme çekmecesinin içeriğini içeren başka bir görünüm ekleyin.
Örneğin, aşağıdaki düzende iki alt görünüme sahip bir DrawerLayout
kullanılır: ana içerik için NavHostFragment
, gezinme çekmecesinin içeriği için ise NavigationView
.
<?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, aşağıdaki örnekte gösterildiği gibi, DrawerLayout
öğesini AppBarConfiguration
öğesine geçirerek gezinme grafiğinize bağlayın:
Kotlin
val appBarConfiguration = AppBarConfiguration(navController.graph, drawerLayout)
Java
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(navController.getGraph()) .setDrawerLayout(drawerLayout) .build();
Ardından, ana etkinlik sınıfınızda, aşağıda gösterildiği gibi ana etkinliğinizin onCreate()
yönteminden setupWithNavController()
çağrısı yapın:
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); }
Gezinme 2.4.0-alpha01 sürümünden başlayarak, setupWithNavController
kullandığınızda her bir menü öğesinin durumu kaydedilir ve geri yüklenir.
Alt gezinme
NavigationUI
alt gezinme menüsünü de kullanabilir. Kullanıcı bir menü öğesi seçtiğinde, NavController
onNavDestinationSelected()
adlı aracı arar ve alt gezinme çubuğunda seçili öğeyi otomatik olarak günceller.
Uygulamanızda bir alt gezinme çubuğu oluşturmak için önce ana etkinliğinizde çubuğu aşağıda gösterildiği gibi tanımlayın:
<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>
Ardından, ana etkinlik sınıfınızda, aşağıda gösterildiği gibi ana etkinliğinizin onCreate()
yönteminden setupWithNavController()
çağrısı yapın:
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); }
Gezinme 2.4.0-alpha01 sürümünden başlayarak, setupWithNavController
kullandığınızda her bir menü öğesinin durumu kaydedilir ve geri yüklenir.
Alt gezinme menüsünü içeren kapsamlı bir örnek için GitHub'daki Android Mimari Bileşenleri Gelişmiş Gezinme Örneği'ne bakın.
Gezinme etkinliklerini dinleyin
Hedefler arasında gezinmenin birincil yöntemi NavController
ile etkileşim kurmaktır. NavController
, NavHost
içeriğinin yeni hedefle değiştirilmesinden sorumludur. Çoğu durumda, üst uygulama çubuğu veya BottomNavigationBar
gibi diğer kalıcı gezinme kontrolleri gibi kullanıcı arayüzü öğeleri NavHost
dışında yer alır ve hedefler arasında gezinirken güncellenmesi gerekir.
NavController
, NavController
öğesinin geçerli hedefi veya bağımsız değişkenleri değiştiğinde çağrılan bir OnDestinationChangedListener
arayüzü sunar. addOnDestinationChangedListener()
yöntemi aracılığıyla yeni bir işleyici kaydedilebilir. addOnDestinationChangedListener()
çağrılırken geçerli hedef varsa bunun hemen işleyicinize gönderildiğini unutmayın.
NavigationUI
, bu yaygın kullanıcı arayüzü bileşenlerinin gezinmeye duyarlı olmasını sağlamak için OnDestinationChangedListener
kullanır. Bununla birlikte, özel kullanıcı arayüzlerinin veya işletme mantığının gezinme etkinliklerini fark etmesini sağlamak için OnDestinationChangedListener
özelliğini tek başına da kullanabileceğinizi unutmayın.
Örneğin, uygulamanızın bazı alanlarında gösterirken diğerlerinde gizlemek istediğiniz ortak kullanıcı arayüzü öğeleriniz olabilir. Kendi OnDestinationChangedListener
öğenizi kullanarak, aşağıdaki örnekte gösterildiği gibi bu kullanıcı arayüzü öğelerini hedef hedefe göre seçerek gösterebilir veya gizleyebilirsiniz:
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, gezinme grafiğinde varsayılan değerlere sahip bağımsız değişkenler de kullanabilirsiniz. Bu varsayılan değerler, uygun kullanıcı arayüzü denetleyicisi tarafından durumunu güncellemek için kullanılabilir. Örneğin, OnDestinationChangedListener
içindeki mantığı önceki örnekte olduğu gibi hedef kimliğine dayandırmak yerine, NavGraph
içinde bir 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 hedefe gidilirken kullanılmaz. Bunun yerine, defaultValue
kullanarak hedefe ek bilgiler eklemenin bir yolu olarak kullanılır. Bu durumda değer, bu hedefte uygulama çubuğunun gösterilip gösterilmeyeceğini belirtir.
Artık Activity
öğesine 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); } } } );
Gezinme hedefi her değiştiğinde NavController
bu geri çağırmayı çağırır. Activity
artık geri çağırmada alınan bağımsız değişkenlere göre sahip olduğu kullanıcı arayüzü bileşenlerinin durumunu veya görünürlüğünü güncelleyebilir.
Bu yaklaşımın bir avantajı, Activity
kullanıcısının gezinme grafiğinde yalnızca bağımsız değişkenleri görmesi ve bireysel Fragment
rollerini ve sorumluluklarını bilmemesidir. Benzer şekilde, bağımsız parçalar kapsayıcı Activity
öğesini ve sahip olduğu kullanıcı arayüzü bileşenlerini bilmez.
Ek kaynaklar
Gezinme hakkında daha fazla bilgi edinmek için aşağıdaki ek kaynaklara bakın.
Sana Özel
Codelab uygulamaları
Blog yayınları
Videolar
- Tek Bir Etkinliğe Geçişle İlgili En İyi 10 Uygulama
- Tek Etkinlik: Neden, Ne Zaman ve Nasıl? (Android Dev Summit 2018)
- Android Jetpack: Kullanıcı arayüzünde Gezinme Denetleyicisi ile gezinme (Google I/O '18)