Çalışma zamanında,
FragmentManager
parçalar ekleyebilir, kaldırabilir, değiştirebilir ve parçalarla başka işlemler gerçekleştirebilir
kullanıcı etkileşimine yanıt olarak. Önerdiğiniz her bir parça
kaydetme işlemine işlem adı verilir ve kayıtta ne yapılacağını
tarafından sağlanan API'leri kullanarak işlemi
FragmentTransaction
sınıfını kullanır. Birden fazla işlemi tek bir işlem altında gruplandırabilirsiniz. Örneğin,
işlem birden fazla parça ekleyebilir veya değiştirebilir. Bu gruplandırma,
ekranda birden çok kardeş parça görüntülendiğinde
bölünmüş görünüm gibi farklı biçimler kullanabilirsiniz.
Her bir işlemi
FragmentManager
kullanarak kullanıcının
parça değişiklikleri - etkinliklerde geriye doğru gitmeye benzer.
FragmentManager
üzerinden FragmentTransaction
örneği alabilirsiniz
aşağıdaki örnekte gösterildiği gibi beginTransaction()
yöntemini çağırarak:
Kotlin
val fragmentManager = ... val fragmentTransaction = fragmentManager.beginTransaction()
Java
FragmentManager fragmentManager = ... FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Her FragmentTransaction
üzerindeki son çağrının işlemi gerçekleştirmesi gerekir.
commit()
çağrısı, FragmentManager
uygulamasına tüm işlemlerin
işleme eklendi.
Kotlin
val fragmentManager = ... // The fragment-ktx module provides a commit block that automatically // calls beginTransaction and commit for you. fragmentManager.commit { // Add operations here }
Java
FragmentManager fragmentManager = ... FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); // Add operations here fragmentTransaction.commit();
Parça durumu değişikliklerinin yeniden sıralanmasına izin ver
Her FragmentTransaction
, setReorderingAllowed(true)
kullanmalıdır:
Kotlin
supportFragmentManager.commit { ... setReorderingAllowed(true) }
Java
FragmentManager fragmentManager = ... fragmentManager.beginTransaction() ... .setReorderingAllowed(true) .commit();
Davranış uyumluluğu için yeniden sıralama işareti varsayılan olarak etkin değildir.
Bununla birlikte, FragmentManager
eklentisinin düzgün bir şekilde yürütülmesine izin vermek için gereklidir
özellikle arka yığında çalışırken FragmentTransaction
animasyonlar ve geçişler çalıştırır. Bayrağı etkinleştirmek,
birden fazla işlem birlikte yürütülürse,
(örneğin, eklenip hemen değiştirilenler)
veya animasyon ya da geçişlerinin
yürütülmesini sağlayabilir. Lütfen
Bu işaret hem işlemin ilk yürütülmesini hem de gerisini etkiler
popBackStack()
ile işlem.
Parça ekleme ve kaldırma
FragmentManager
öğesine parça eklemek için şunu çağırın:
add()
gösteren bir e-posta alırsınız. Bu yöntem
parçaya ait kapsayıcının kimliği ve
parçayı seçeceğim. Eklenen parça, RESUMED
öğesine taşınır
durumu. Kapsayıcının
FragmentContainerView
birini seçin.
Bir parçayı ana makineden kaldırmak için şu komutu çağırın:
remove()
parçadan alınan bir parça örneğinden geçme
findFragmentById()
veya findFragmentByTag()
aracılığıyla yöneticisisiniz.
Parçanın görünümü bir kapsayıcıya önceden eklenmişse görünüm
artık bu kapsayıcıdan kaldırılmış olabilir. Kaldırılan parça taşınır
DESTROYED
durumuna.
Tekliflerinizi otomatikleştirmek ve optimize etmek için
replace()
öğesini, bir container'daki mevcut bir parçayı
parça sınıfını kullanabilirsiniz. replace()
işlevinin çağrılması şuna eşdeğerdir:
kapsayıcıdaki bir parçayla remove()
çağrısı yapma ve yeni bir parça ekleme
parçasını oluşturur.
Aşağıdaki kod snippet'i, bir parçayı diğeriyle nasıl değiştirebileceğinizi gösterir:
Kotlin
// Create new fragment val fragmentManager = // ... // Create and commit a new transaction fragmentManager.commit { setReorderingAllowed(true) // Replace whatever is in the fragment_container view with this fragment replace<ExampleFragment>(R.id.fragment_container) }
Java
// Create new fragment and transaction FragmentManager fragmentManager = ... FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.setReorderingAllowed(true); // Replace whatever is in the fragment_container view with this fragment transaction.replace(R.id.fragment_container, ExampleFragment.class, null); // Commit the transaction transaction.commit();
Bu örnekte, yeni bir ExampleFragment
örneği parçanın yerini alır
şu anda
R.id.fragment_container
.
Varsayılan olarak, FragmentTransaction
içinde yapılan değişiklikler
hazırlar. Bu değişiklikleri kaydetmek için
addToBackStack()
FragmentTransaction
üzerinde. Daha fazla bilgi için bkz.
Parça yöneticisi.
Kaydetme eşzamansız
Telefon etme
commit()
İşlemi hemen gerçekleştirmez. Daha ziyade,
ana kullanıcı arayüzü iş parçacığında çalışacak şekilde planlandı. Eğer
gerekli ancak yine de
commitNow()
öğesini eklemeniz gerekir.
commitNow
uygulamasının addToBackStack
ile uyumlu olmadığını unutmayın. Alternatif olarak:
tarafından gönderilen ve beklemede olan tüm FragmentTransactions
commit()
executePendingTransactions()
çağrısı yapılarak henüz başlatılmamış olan çağrılar. Bu yaklaşım addToBackStack
ile uyumludur.
Kullanım alanlarının büyük çoğunluğu için ihtiyacınız olan tek şey commit()
.
Operasyon sıralaması önemlidir
Belirli bir
FragmentTransaction
özellikle setCustomAnimations()
kullanılırken çok önemlidir. Bu
yöntemi, belirtilen animasyonları
takip eder.
Kotlin
supportFragmentManager.commit { setCustomAnimations(enter1, exit1, popEnter1, popExit1) add<ExampleFragment>(R.id.container) // gets the first animations setCustomAnimations(enter2, exit2, popEnter2, popExit2) add<ExampleFragment>(R.id.container) // gets the second animations }
Java
getSupportFragmentManager().beginTransaction() .setCustomAnimations(enter1, exit1, popEnter1, popExit1) .add(R.id.container, ExampleFragment.class, null) // gets the first animations .setCustomAnimations(enter2, exit2, popEnter2, popExit2) .add(R.id.container, ExampleFragment.class, null) // gets the second animations .commit()
Parçanın yaşam döngüsünü sınırlama
FragmentTransactions
, kullanıcının yaşam döngüsü durumunu etkileyebilir
parçalarının sayısını kontrol edin. Bir
FragmentTransaction
,
setMaxLifecycle()
belirtilen parça için maksimum durumu belirler. Örneğin,
ViewPager2
kullanımları
Ekran dışı parçaları STARTED
durumuyla sınırlamak için setMaxLifecycle()
.
Parçanın görünümlerini gösterme ve gizleme
FragmentTransaction
yöntemlerini kullanın
show()
ve
hide()
görebilirsiniz.
Bu yöntemler, parçanın görünümlerinin görünürlüğünü etkilemeden ayarlar
parçanın yaşam döngüsünü takip eder.
Görünürlüğü açıp kapatmak için parça işlemi kullanmanız gerekmez. parçanın içindeki görünümlerin dışına çıkarsa bu yöntemler, görünürlük durumundaki değişikliklerin ilişkilendirilmesini istiyorsanız işlemleri olabilir.
Parça ekleme ve çıkarma
FragmentTransaction
yöntemi
detach()
parçayı kullanıcı arayüzünden ayırır ve görünüm hiyerarşisini yok eder. Parça
arka gruba yerleştirildiğinde olduğu gibi aynı durumda (STOPPED
) kalır.
Bu, parçanın kullanıcı arayüzünden kaldırıldığı ancak hâlâ
parça yöneticisidir.
İlgili içeriği oluşturmak için kullanılan
attach()
yöntemi, daha önce ayrıldığı bir parçayı tekrar ekler.
Bu, görünüm hiyerarşisinin yeniden oluşturulmasına, kullanıcı arayüzüne eklenmesine ve
gösterilir.
FragmentTransaction
, tek bir atomik işlem kümesi olarak ele alınır.
hem detach
hem de attach
çağrılarına aynı parça örneğinde
birbirlerini etkili bir şekilde iptal edebilir ve böylece
parçanın kullanıcı arayüzünün kaldırılması ve hemen yeniden oluşturulması. Ayrı
commit()
kullanılıyorsa executePendingOperations()
ile ayrılmış işlemler,
bir parçayı ayırıp hemen yeniden eklemek istiyorsanız.