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 bir Geri düğmesi eklememeniz gerekir. Ş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 genellikle Android'in
önceki hedefler için geri düğmesine basın. Ancak her zaman
uygulamanızın geri davranışını izlemesi için bazı durumlarda
mümkün olan en iyi kullanıcı deneyimini Örneğin, WebView
kullanırken
kullanıcının belirli işlemleri gerçekleştirmesini sağlamak için, varsayılan Geri düğmesi davranışını
Önceki ekranlar yerine web tarama geçmişlerinde geri gitme
dokunun.
Ö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. Yalnızca geri arama etkinleştirildiğinde (ör.
isEnabled()
true
dönerse) 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öntemleriyle eklenir. Bu nedenle,
addCallback()
bağlantısını kullanın.
LifecycleOwner
alan
Bu, OnBackPressedCallback
öğesinin yalnızca LifecycleOwner
Lifecycle.State.STARTED
.
Etkinlik, ilişkilendirildikleri zaman kaydedilen geri çağırmaları da kaldırır.
LifecycleOwner
, bellek sızıntılarını önleyerek uygun hale geldi
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, bir geri çağırma uygulaması örneği 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 sırada, geri çağırma işlevleri ters sırada çağrılır:
eklenir. Son eklenen geri çağırma,
Geri düğmesi etkinliği. Örneğin,
one
, two
ve three
öğeleri sırasıyla şu sırayla çağrılır:
Sırasıyla three
, two
ve 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ştirilemedi. one
geri çağırması, yalnızca two
geri çağırması durumunda çağrılır
etkinleştirilmemiş olabilir.
addCallback()
üzerinden eklendiğinde,
geri arama, sorumluluk zincirine dahil edilmez.
LifecycleOwner
giriş yaptı
Lifecycle.State.STARTED
durumu.
OnBackPressedCallback
içindeki etkin durumun değiştirilmesi çok önemlidir
yukarıda açıklanan sıralamayı koruduğundan geçici değişiklikler için önerilir.
Bu, özellikle birden fazla
farklı iç içe yerleştirilmiş yaşam döngüsü sahipleri.
Ancak, OnBackPressedCallback
öğesini tamamen kaldırmak istediğiniz durumlarda,
telefon etmeli
remove()
Ancak 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 yapamazsanı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.