Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Parçaları yönetmeye yardımcı olmak için Android sınıfını FragmentManager
sağlar. Her Etkinliğin Parçaları'nın Android.App.FragmentManager
bulunacağı veya dinamik olarak değiştireceği bir örneği vardır. Bu değişikliklerin her kümesi bir işlem olarak bilinir ve tarafından yönetilen FragmentManager
sınıfında Android.App.FragmentTransation
yer alan API'lerden biri kullanılarak gerçekleştirilir. Etkinlik aşağıdaki gibi bir işlem başlatabilir:
FragmentTransaction fragmentTx = this.FragmentManager.BeginTransaction();
Parçalarda yapılan bu değişiklikler örnekte gibi Add()
Remove(),
yöntemler kullanılarak gerçekleştirilir FragmentTransaction
ve Replace().
değişiklikler kullanılarak Commit()
uygulanır. Bir işlemdeki değişiklikler hemen gerçekleştirilmiyor.
Bunun yerine, etkinliğin kullanıcı arabirimi iş parçacığında en kısa sürede çalışacak şekilde zamanlanır.
Aşağıdaki örnekte, mevcut bir kapsayıcıya Parça ekleme gösterilmektedir:
// Create a new fragment and a transaction.
FragmentTransaction fragmentTx = this.FragmentManager.BeginTransaction();
DetailsFragment aDifferentDetailsFrag = new DetailsFragment();
// The fragment will have the ID of Resource.Id.fragment_container.
fragmentTx.Add(Resource.Id.fragment_container, aDifferentDetailsFrag);
// Commit the transaction.
fragmentTx.Commit();
İşlem çağrıldıktan sonra Activity.OnSaveInstanceState()
işlenirse bir özel durum oluşturulur. Bunun nedeni, Etkinlik durumunu kaydettiğinde Android'in barındırılan Parçaların durumunu da kaydetmesidir. Bu noktadan sonra herhangi bir Parça işlemi işlenirse, Etkinlik geri yüklendiğinde bu işlemlerin durumu kaybolur.
Çağrısı yaparak Parçalama işlemlerini Etkinliğin geri yığınınaFragmentTransaction.AddToBackStack()
kaydetmek mümkündür. Bu, kullanıcının Geri düğmesine basıldığında Parça değişiklikleri arasında geriye doğru gezinmesini sağlar. Bu yönteme çağrı yapılmazsa, kaldırılan parçalar yok edilir ve kullanıcı Etkinlik içinde geri giderse kullanılamaz.
Aşağıdaki örnekte, arka yığındaki ilk Parçanın AddToBackStack
FragmentTransaction
durumunu korurken bir Parçanın yerini almak için yönteminin nasıl kullanılacağı gösterilmektedir:
// Create a new fragment and a transaction.
FragmentTransaction fragmentTx = this.FragmentManager.BeginTransaction();
DetailsFragment aDifferentDetailsFrag = new DetailsFragment();
// Replace the fragment that is in the View fragment_container (if applicable).
fragmentTx.Replace(Resource.Id.fragment_container, aDifferentDetailsFrag);
// Add the transaction to the back stack.
fragmentTx.AddToBackStack(null);
// Commit the transaction.
fragmentTx.Commit();
Parçalar ile İletişim Kurma
FragmentManager, bir Etkinliğe bağlı olan tüm Parçaları bilir ve bu Parçaları bulmaya yardımcı olmak için iki yöntem sağlar:
FindFragmentById – Bu yöntem, düzen dosyasında belirtilen kimliği veya parça bir işlemin parçası olarak eklendiğinde kapsayıcı kimliğini kullanarak bir Parça bulur.
FindFragmentByTag – Bu yöntem, düzen dosyasında sağlanan veya bir işleme eklenmiş etiketi olan bir Parça bulmak için kullanılır.
Hem Parçalar hem de Etkinlikler öğesine başvurur FragmentManager
, bu nedenle aralarında ileri geri iletişim kurmak için aynı teknikler kullanılır. Bir uygulama, bu iki yöntemden birini kullanarak bir başvuru Parçası bulabilir, uygun türe başvuranı yayınlar ve ardından doğrudan Parça üzerinde yöntemleri çağırır. Aşağıdaki kod parçacığı bir örnek sağlar:
Ayrıca, Etkinliğin Parçaları bulmak için 'yi FragmentManager
kullanması da mümkündür:
var emailList = FragmentManager.FindFragmentById<EmailListFragment>(Resource.Id.email_list_fragment);
emailList.SomeCustomMethod(parameter1, parameter2);
Etkinlikle İletişim Kurma
Bir Parçanın konağına başvurmak Fragment.Activity
için özelliğini kullanması mümkündür. Etkinliği daha belirli bir türe dönüştürerek, aşağıdaki örnekte gösterildiği gibi bir Etkinliğin konaktaki yöntemleri ve özellikleri çağırması mümkündür:
var myActivity = (MyActivity) this.Activity;
myActivity.SomeCustomMethod();