Görev dağıtıcı ayarlama

Güçlü bir gezinme sistemi uygulamak için uygulamanızın, geri hareketlerini ve diğer gezinme sinyallerini işlemek üzere merkezi bir yönteme ihtiyacı vardır. Bu sayfada, bu gezinme etkinliklerini uygulamanızda koordine etmek ve dağıtmak için NavigationEventDispatcher'in nasıl kullanılacağı açıklanmaktadır.

NavigationEventDispatcher bildirme

NavigationEventDispatcher, NavigationEvent kitaplığının temel bileşenidir. Geri hareketleri ve gezinme geçişleri gibi gezinmeyle ilgili etkinlikleri uygulamanızdaki kayıtlı dinleyicilere gönderen bir etkinlik merkezi görevi görür. Bileşenler, gezinme değişikliklerine veya sistem tarafından yönlendirilen diğer gezinme işlemlerine tepki vermek için bu etkinliklere abone olabilir.

NavigationEventDispatcherOwner aracılığıyla NavigationEventDispatcher örnekleri sağlamanız gerekir. Bu sayede, uygulamanızın farklı bölümleri aynı dağıtıcıya erişebilir ve gezinme etkinliklerini tutarlı ve koordineli bir şekilde gözlemleyebilir.

class MyComponent: NavigationEventDispatcherOwner {
    override val navigationEventDispatcher: NavigationEventDispatcher =
        NavigationEventDispatcher()
}

ComponentActivity içindeyseniz kendi dağıtıcınızı uygulamak yerine sizin için sağlanan dağıtıcıyı alabilirsiniz.

class MyCustomActivity : ComponentActivity() {
    fun addMyHandler() {
        // navigationEventDispatcher provided by the ComponentActivity
        navigationEventDispatcher.addHandler(myNavigationEventHandler)
    }
}

NavigationEventInput ekleyin

İşleyiciyi kaydettiğinize göre artık etkinlikleri almaya hazırsınız. Ancak etkinliklerin oluşturulduğu kaynağı NavigationEventInput ile belirtmeniz gerekir.

NavigationEventInput, ham sistem girişini alan ve NavigationEventDispatcher'ye gönderilecek standart bir NavigationEvent biçimine dönüştüren platforma özgü bileşendir.

Aşağıdaki örnek, NavigationEventInput için özel bir uygulamadır:

public class MyInput : NavigationEventInput() {
    @MainThread
    public fun backStarted(event: NavigationEvent) {
        dispatchOnBackStarted(event)
    }

    @MainThread
    public fun backProgressed(event: NavigationEvent) {
        dispatchOnBackProgressed(event)
    }

    @MainThread
    public fun backCancelled() {
        dispatchOnBackCancelled()
    }

    @MainThread
    public fun backCompleted() {
        dispatchOnBackCompleted()
    }
}

Ardından, bu girişi dağıtıcınıza sağlayın:

navigationEventDispatcher.addInput(MyInput())

dispose() ile kaynakları temizleme

Dinamik bir kullanıcı arayüzünde bellek sızıntılarını önlemek için oluşturulan her NavigationEventDispatcher örneği, bağlı olduğu bileşen yok edildiğinde dispose() yöntemi kullanılarak hiyerarşiden açıkça kaldırılmalıdır:

navigationEventDispatcher.dispose()

dispose() yöntemi, dağıtıcıyı ve tüm alt öğelerini (alt öğeler ve torunlar) iteratif olarak kaldırarak kademeli temizleme sağlar. Böylece, ilişkili tüm işleyicilerin paylaşılan sistemden kaydı silinir.

Sevk görevlisi hiyerarşisi ve kontrolü

NavigationEventDispatcher, üst-alt hiyerarşisini destekler. Bu sayede, kullanıcı arayüzünün derinliklerinde iç içe yerleştirilmiş bileşenler (ör. iç içe yerleştirilmiş NavHost'ler veya iletişim kutuları) gezinme etkinliği işlemeye katılabilir.

Alt dağıtıcı oluşturma

Alt dağıtıcı, oluşturma sırasında üst dağıtıcısına bir referans iletilerek oluşturulur. Hiyerarşideki tüm dağıtıcılar, önceliğe göre global bir son giren ilk çıkar (LIFO) etkinlik sıralaması sağlamak için aynı NavigationEventProcessor değerini paylaşır.

Hiyerarşik etkinleştirme

Dağıtıcı, geliştiricilerin tüm işleyici alt ağacını tek seferde etkinleştirmesine veya devre dışı bırakmasına olanak tanıyan bir isEnabled özelliği içerir.

Bir üst dağıtıcı devre dışı bırakıldığında (isEnabled = false), bu üst öğeyle ve alt öğeleriyle ilişkili tüm işleyiciler, kendi etkinleştirme durumlarından bağımsız olarak yoksayılır.