Aracılığıyla paylaş


Parçaları Yönetme

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 FragmentManagersınıfında Android.App.FragmentTransationyer 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 AddToBackStackFragmentTransaction 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();