Özel geri gezinme çubuğu sağlama

Geri gezinme, kullanıcıların geçmişte kaldıkları ekranlarında ziyaret edin. Tüm Android cihazlar bu tür için bir Geri düğmesi sağlar bu nedenle uygulamanızın kullanıcı arayüzüne geri düğmesi eklemeyin. Şuna bağlı olarak: Bu düğme fiziksel bir düğme veya yazılım olabilir. düğmesini tıklayın.

Android, kullanıcı gezinirken geriye dönük bir hedef yığını sağlar. pek çok yolu vardır. Bu şekilde Android, önceki hedefler için geri düğmesine basın. Ancak her zaman Bu durumlarda, uygulamanızın geri davranışını bir mümkün olan en iyi kullanıcı deneyimini

Örneğin, WebView kullanırken kullanıcının izin vermesi için varsayılan Geri düğmesi davranışını Önceki ekranlar yerine web tarama geçmişlerinde geri gitme dokunun.

Android 13 ve sonraki sürümler, Android cihazlar için tahmine dayalı geri hareketi içerir. Alıcı: Bu özellik hakkında daha fazla bilgi edinmek isterseniz Tahmine dayalı geri hareketi için destek ekleme başlıklı makaleye göz atın.

Özel geri gezinme uygulayın

ComponentActivity, temel FragmentActivity için sınıf ve AppCompatActivity, öğesini kullanarak Geri düğmesinin davranışını kontrol etmenizi sağlar. OnBackPressedDispatcher, getOnBackPressedDispatcher() numaralı telefonu arayarak alabilirsiniz.

OnBackPressedDispatcher, Geri düğmesi etkinliklerinin nasıl gönderileceğini kontrol eder bir veya daha fazla OnBackPressedCallback kullanıcısına nesneler'i tıklayın. OnBackPressedCallback işlevinin kurucusu ilk etkin durumuna ayarlanır. Bir geri çağırma etkinleştirildiğinde (yani isEnabled() true değerini döndürür. Görev dağıtıcı, geri çağırmanın handleOnBackPressed() geri düğmesi etkinliğini işlemek için gereklidir. Şu numarayı arayarak durumu değiştirebilirsiniz: setEnabled().

Geri çağırma işlevleri, addCallback yöntemleri kullanılarak eklenir. Önerilerimiz addCallback() LifecycleOwner alan Bu, OnBackPressedCallback öğesinin yalnızca LifecycleOwner Lifecycle.State.STARTED. Etkinlik, ilişkilendirildikleri zaman kaydedilen geri çağırmaları da kaldırır. LifecycleOwner yok edilir. Bu da bellek sızıntılarını önler ve LifecycleOwner uygun parçalarda veya daha kısa ömürlü olan diğer yaşam döngüsü sahiplerinde kullanım için daha iyi bir fırsattır.

Aşağıda, örnek bir geri çağırma uygulaması verilmiştir:

Kotlin

class MyFragment : Fragment() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // This callback is only called when MyFragment is at least started
        val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
            // Handle the back button event
        }

        // The callback can be enabled or disabled here or in the lambda
    }
    ...
}

Java

public class MyFragment extends Fragment {

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // This callback is only called when MyFragment is at least started
        OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */) {
            @Override
            public void handleOnBackPressed() {
                // Handle the back button event
            }
        };
        requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);

        // The callback can be enabled or disabled here or in handleOnBackPressed()
    }
    ...
}

addCallback() özelliğini kullanarak birden fazla geri arama sağlayabilirsiniz. Böylece, geri çağırmalar belirttiğinizden ters sırada çağrılır. son eklenen geri çağırmayı da kullanabilirsiniz. Böylece, Geri düğmesi etkinliği. Örneğin, one, two ve three bu sırayla çağrılır: three, two one.

Geri çağırma işlevleri Sorumluluk Zinciri desen. Zincirdeki her bir geri çağırma, yalnızca önceki geri çağırma etkinleştirilmedi. Bu, önceki örnekte, two geri çağırması yalnızca three geri çağırması durumunda çağrılır etkinleştirilmez ve one geri çağırması yalnızca two geri çağırması durumunda çağrılır etkin değil.

Geri çağırma addCallback() kullanılarak eklendiğinde, o ana kadar sorumluluk zincirine dahil edilmez. LifecycleOwner, Lifecycle.State.STARTED durumuna girer.

OnBackPressedCallback cihazındaki etkin durumu değiştirmenizi öneririz. çünkü bu işlem yukarıda açıklanan sıralamayı korur. Bu, özellikle birden fazla sahip olması için kritik önem taşır.

OnBackPressedCallback öğesini tamamen kaldırmak istediğiniz durumlarda, telefon edebilirsin remove() Bu genellikle gerekli değildir çünkü ilişkili LifecycleOwner kaldırıldı.

onBackPrinted() etkinliği

Şunu kullanıyorsanız: onBackPressed() geri düğmesi etkinliklerini işlemek için bir Bunun yerine OnBackPressedCallback. Ancak bu değişikliği yapamıyorsanız aşağıdaki kurallar geçerli olur:

  • addCallback aracılığıyla kaydedilen tüm geri aramalar, telefon ettiğinizde değerlendirilir super.onBackPressed().
  • Android 12 (API düzeyi 32) ve önceki sürümlerde onBackPressed her zaman çağrılır. kayıtlı OnBackPressedCallback örneklerinden bağımsız olarak kullanılabilir.