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ğerlendirilirsuper.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.