Fragment ve FragmentActivity arasındaki fark nedir?


Yanıtlar:


280

A , aşağıdakilere sahip olan Fragmentbir bölümüdür Activity:

  • kendi yaşam döngüsü
  • kendi girdi etkinliklerini alır
  • çalışırken eklenebilir veya kaldırılabilir Activity.

A Fragmenther zaman bir Activity.

FragmentsHoneyComb (3.0) öncesi API'nın bir parçası değildir. FragmentsHoneyComb'tan önceki bir platform sürümünü hedefleyen bir uygulamada kullanmak istiyorsanız , projenize Destek Paketi eklemeniz ve FragmentActivitycihazınızı tutmak için öğesini kullanmanız gerekir Fragments. FragmentActivitySınıf ile ilgili bir API vardır Fragments, oysa Activitysınıf, petek yapılı öncesinde değildir.

Proje petek veya yalnızca daha yeni hedefliyorsa, kullanmak gerekir Activitydeğil FragmentActivityBekletmenizi için Fragments.

Bazı detaylar:

Kullanım android.app.Fragmentile Activity. Kullanım android.support.v4.app.Fragmentile FragmentActivity. Destek paketini eklemeyin Fragmentbir karşı Activitybir durum atılmasına neden olacağından.

Dikkat edilmesi gereken bir şey: FragmentManagerve LoaderManagerFragmentActivity için ayrı destek sürümlerine sahip olmak:

Eğer bir kullanıyorsanız Fragmentbir in Activity(petek ve üstü), çağrı

  • getFragmentManager() almak android.app.FragmentManager
  • getLoaderManager() almak android.app.LoaderManager

Eğer bir kullanıyorsanız Fragmentbir de FragmentActivity(ön Honeycomb) çağrıyı:

  • getSupportFragmentManager()almak için android.support.v4.app.FragmentManager.
  • getSupportLoaderManager() almak android.support.v4.app.LoaderManager

böylece, yok do

//don't do this
myFragmentActivity.getLoaderManager(); 
//instead do this:
myFragmentActivity.getSupportLoaderManager();

veya

//don't do this:
android.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager();
//instead do this:
android.support.v4.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager()

Bir parçanın içine gömülmek Activityzorunda olsa da, Activitymizanpajın bir parçası olması gerekmediğini bilmek de yararlıdır . Kendi arayüzü olmadan, etkinlik için görünmez bir işçi olarak kullanılabilir.


6
Ancak, bir parçanın etkinlik düzeninin bir parçası olması gerekmez; etkinlik için görünmez bir işçi olarak kendi kullanıcı arayüzü olmayan bir parçayı da kullanabilirsiniz.
uzay95

1
@ uzay95 Bunu belirttiğin için teşekkürler. Sonunda bahsetmek için bir bölüm ekledim.
Gunnar Karlsson

@GunnarKarlsson fragmentActivity'ye parça ekleyelim mi?
Dhasneem

2
@Dhasneem Uygulamanızın 3.0'ın altındaki Android sürümlerinde çalışmasını istiyorsanız bir FragmentActivity'ye bir Parça eklersiniz. Aksi takdirde, bir Etkinliğe bir Parça eklersiniz.
Gunnar Karlsson

2
Teşekkürler! Bu benim sorunumu çözdü! Artık Facebook giriş düğmesi ekledikten sonra uygulamamın neden (Etkinlik ile yazılmış) her zaman onCreate'de çöktüğünü biliyorum (örneklerinde android.support.v4.app.Fragment kullanıyorlar). Tabii ki çökmenin başka bir nedeni daha var. Ama cevabınız onları bir araya getirmek için son parça.
Chlind

14

FragmentActivity, parça desteğine sahip klasik etkinliğimizdir, başka bir şey değildir. Bu nedenle, Faaliyete bir Parça ekleneceği zaman FragmentActivity gereklidir.

Well Fragment, Aktivitenin temel davranışlarını kopyalayan iyi bir bileşendir, yine de Aktivite gibi bağımsız bir uygulama bileşeni değildir ve çalışması için Aktiviteye eklenmesi gerekir.

Bakın burada daha fazla ayrıntı için


1
BTW, Yalnızca API 11'den eski cihazlarda çalışmak isteyen uygulamalar için geçerli olan güncel olmayan yanıt.
ToolmakerSteve

@ToolmakerSteve daha fazla ayrıntı sağlayabilir misiniz? Mümkünse, yanıtı güncel sürümle düzenleyebilir misiniz?
Gökhan Barış Aker

8

FragmentActivity'yi, Fragment'ları destekleyebilecek normal bir Activity sınıfı olarak düşünün. Petek yapmadan önce, bir aktivite sınıfı Fragmanları doğrudan destekleyemezdi, bu yüzden Fragment kullanan aktivitelerde bu gereklidir.

Hedef dağıtımınız Petek ve ötesi ise, bunun yerine Etkinlik dışı bırakabilirsiniz.

Ayrıca bir parça 'alt faaliyet' olarak kabul edilmelidir. Etkinlik olmadan var olamaz. Bir parçayı her zaman bir alt aktivite olarak düşünün ve iyi olmalısınız. Dolayısıyla etkinlik, ebeveyn ve çocuğun türü sembolik bir ilişki olacaktır.


1

a FragmentActivity, Fragment içeren geçici bir etkinliktir. Bu birkaç kelimede size android 3.0 (HoneyComb) ile android ekibinin android sdk'ye eklediği ana önemli değişikliklerden birini açıkladım.

Bu yeni konsept ile kod ve yerleşim parçalarınız daha esnek ve bakımı kolay hale gelir. Google'da arama yaparsanız birçok örnek vardır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.