NavigationUI kullanarak kullanıcı arayüzü bileşenlerini NavController'a bağlama

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
Şekil 1. Üst uygulama çubuğunun gösterildiği bir ekran.

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
Şekil 2. İki uygulama çubuğu varyasyonu. Sol tarafta standart bir 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
Şekil 3. Gezinme menüsünü gösteren açık çekmece açılır.

Ç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
Şekil 4. Alt gezinme çubuğu.

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