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:
addCallbackaracılığıyla kaydedilen tüm geri aramalar, telefon ettiğinizde değerlendirilirsuper.onBackPressed().- Android 12 (API düzeyi 32) ve önceki sürümlerde
onBackPressedher zaman çağrılır. kayıtlıOnBackPressedCallbackörneklerinden bağımsız olarak kullanılabilir.