Kullanıcılar geri gezinme özelliğini kullanarak ekranlarda geri gider. Çoğu Android cihazda fiziksel, yazılım tabanlı veya hareket tabanlı bir geri düğmesi bulunur. Genellikle uygulamanıza geri düğmesi eklememelisiniz. Ancak uyumluluk modundaki Android Automotive OS (AAOS) cihazlarda sistem geri düğmesi kullanılır. Bu, gezinmeyi yönetir. Bu nedenle, kendi gezinme menünüzü eklemeniz gerekmez. Ayrıntılı bilgi için AAOS Uyumluluk Modu başlıklı makaleyi inceleyin.
Android, kullanıcı uygulamanızda gezinirken hedeflerin geri yığınını korur. Bu genellikle Android'in, Geri düğmesine basıldığında önceki hedeflere düzgün şekilde gitmesine olanak tanır. Ancak, mümkün olan en iyi kullanıcı deneyimini sunmak için uygulamanızın kendi Geri davranışını uygulaması gerekebilecek birkaç durum vardır. Örneğin, WebView
kullanırken kullanıcının uygulamanızdaki önceki ekranlar yerine web tarama geçmişinde geri gitmesine izin vermek için varsayılan Geri düğmesi davranışını geçersiz kılabilirsiniz.
Özel geri gezinme uygulama
FragmentActivity
ve AppCompatActivity
için temel sınıf olan ComponentActivity
, OnBackPressedDispatcher
özelliğini kullanarak Geri düğmesinin davranışını kontrol etmenize olanak tanır. OnBackPressedDispatcher
özelliğini getOnBackPressedDispatcher()
çağırarak alabilirsiniz.
OnBackPressedDispatcher
, Geri düğmesi etkinliklerinin bir veya daha fazla OnBackPressedCallback
nesnesine nasıl dağıtıldığını kontrol eder. OnBackPressedCallback
sınıfının kurucusu, ilk etkin durum için bir boole alır. Yalnızca geri arama etkinleştirildiğinde (ör.
isEnabled()
true
değerini döndürür) görev dağıtıcı, Geri düğmesi etkinliğini işlemek için geri çağırmanın handleOnBackPressed()
yöntemini çağırır. setEnabled()
çağrısını yaparak etkin durumu değiştirebilirsiniz.
Geri çağırma işlevleri addCallback
yöntemleri aracılığıyla eklenir. LifecycleOwner
alan adı alan addCallback()
yöntemini kullanmanız önemle tavsiye edilir.
Bu sayede OnBackPressedCallback
yalnızca LifecycleOwner
Lifecycle.State.STARTED
olduğunda eklenir.
Etkinlik, ilişkili LifecycleOwner
yok edildiğinde kayıtlı geri çağırma işlevlerini de kaldırır. Bu, bellek sızıntılarını önler ve geri çağırma işlevlerinin, etkinlikten daha kısa ömürlü olan parçalarda veya diğer yaşam döngüsü sahiplerinde kullanılmasına olanak tanır.
Aşağıda geri çağırma işlevinin nasıl uygulanacağına dair bir örnek verilmiştir:
Kotlin
class MyFragment : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // This callback will only be 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 will only be 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()
üzerinden birden fazla geri arama sağlayabilirsiniz.
Bu işlem yapılırken geri çağırma işlevleri, eklendikleri sıranın tersine göre çağrılır. Geri düğmesi etkinliğini işleme şansı ilk olarak en son eklenen geri çağırma işlevine verilir. Örneğin, sırasıyla one
, two
ve three
adlı üç geri çağırma eklediyseniz bunlar sırasıyla three
, two
ve one
sırasına göre çağrılır.
Geri çağırma işlevleri Sorumluluk Zinciri kalıbını izler. Zincirdeki her geri çağırma yalnızca önceki geri çağırma etkinleştirilmemişse çağrılır. Bu, önceki örnekte two
geri çağırma işlevinin yalnızca three
geri çağırma işlevi etkinleştirilmemişse çağrılacağı anlamına gelir. one
geri çağırma işlevi yalnızca two
geri çağırma işlevi etkinleştirilmemişse çağrılır.
addCallback()
aracılığıyla eklendiğinde, LifecycleOwner
Lifecycle.State.STARTED
durumuna girene kadar geri çağırma işlevinin sorumluluk zincirine eklenmediğini unutmayın.
Yukarıda açıklanan sıralamayı koruduğu için geçici değişiklikler için OnBackPressedCallback
'teki etkin durumun değiştirilmesi önemle tavsiye edilir. Bu, özellikle birden fazla farklı iç içe yerleştirilmiş yaşam döngüsü sahibine kayıtlı geri çağırma işlevleriniz varsa önemlidir.
Ancak OnBackPressedCallback
öğesini tamamen kaldırmak istiyorsanız remove()
numaralı telefonu aramanız gerekir.
Ancak, ilişkili LifecycleOwner
yok edildiğinde geri çağırma işlevleri otomatik olarak kaldırıldığı için bu genellikle gerekli değildir.
Etkinlik onBackPressed()
Geri düğmesi etkinliklerini yönetmek için onBackPressed()
kullanıyorsanız bunun yerine OnBackPressedCallback
kullanmanızı öneririz.
Ancak bu değişikliği yapamıyorsanız aşağıdaki kurallar geçerli olur:
addCallback
üzerinden kaydedilen tüm geri aramalar,super.onBackPressed()
'u aradığınızda değerlendirilir.- Android 12 (API düzeyi 32) ve önceki sürümlerde,
OnBackPressedCallback
'un kayıtlı örneklerine bakılmaksızınonBackPressed
her zaman çağrılır.