Apa perbedaan antara Fragmen dan FragmenAktivitas?

Jawaban:

280

A Fragmentadalah bagian dari Activity, yang memiliki:

  • siklus hidupnya sendiri
  • menerima input acara sendiri
  • dapat ditambahkan atau dihapus saat Activitysedang berjalan.

A Fragmentharus selalu disematkan dalam Activity.

Fragmentsbukan bagian dari API sebelum HoneyComb (3.0). Jika Anda ingin menggunakan Fragmentsdalam aplikasi yang menargetkan versi platform sebelum HoneyComb, Anda perlu menambahkan Paket Dukungan ke proyek Anda dan menggunakan FragmentActivityuntuk menahan Anda Fragments. The FragmentActivitykelas memiliki API untuk menangani Fragments, sedangkan Activitykelas, sebelum Honeycomb, tidak.

Jika proyek Anda hanya menargetkan HoneyComb atau lebih baru, Anda harus menggunakan Activitydan tidak FragmentActivitymenahan Fragments.

Beberapa detail:

Gunakan android.app.Fragmentdengan Activity. Gunakan android.support.v4.app.Fragmentdengan FragmentActivity. Jangan menambahkan paket dukungan Fragmentke Activitykarena akan menyebabkan Pengecualian terlempar.

Suatu hal yang harus diperhatikan: FragmentManagerdan LoaderManagermemiliki versi dukungan terpisah untuk FragmentActivity:

Jika Anda menggunakan Fragmentdalam Activity(HoneyComb dan atas), hubungi

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

jika Anda menggunakan a Fragmentdalam FragmentActivity(pra-HoneyComb), hubungi:

  • getSupportFragmentManager()untuk mendapatkan android.support.v4.app.FragmentManager.
  • getSupportLoaderManager() mendapatkan android.support.v4.app.LoaderManager

jadi, jangan lakukan

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

atau

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

Juga berguna untuk diketahui adalah bahwa sementara sebuah fragmen harus tertanam di Activitydalamnya, ia tidak harus menjadi bagian dari Activitytata letak. Ini dapat digunakan sebagai pekerja tak terlihat untuk aktivitas tersebut, tanpa UI sendiri.

Gunnar Karlsson
sumber
6
Namun, sebuah fragmen tidak diperlukan untuk menjadi bagian dari tata letak aktivitas; Anda juga dapat menggunakan fragmen tanpa UI sendiri sebagai pekerja yang tidak terlihat untuk aktivitas tersebut.
uzay95
1
@ uzay95 terima kasih telah menunjukkan ini. Saya menambahkan bagian di akhir untuk menyebutkannya.
Gunnar Karlsson
@GunnarKarlsson Haruskah kita menambahkan fragmen ke fragmentActivity?
Dhasneem
2
@Dasneem Anda menambahkan Fragmen ke FragmentActivity jika Anda ingin aplikasi Anda bekerja pada versi Android yang lebih rendah dari 3.0. Kalau tidak, Anda menambahkan Fragmen ke Aktivitas.
Gunnar Karlsson
2
Terima kasih! Ini menyelesaikan masalah saya! Sekarang saya tahu mengapa aplikasi saya (ditulis dengan Activity) selalu macet di onCreate setelah menambahkan tombol login Facebook (mereka menggunakan android.support.v4.app.Fragment dalam contoh mereka). Tentu saja ada juga alasan lain untuk kecelakaan itu. Tetapi jawaban Anda adalah bagian terakhir untuk menyatukannya.
Chlind
14

FragmentActivity adalah Aktivitas klasik kami dengan dukungan fragmen, tidak lebih. Oleh karena itu FragmentActivity diperlukan, ketika Fragmen akan dilampirkan ke Aktivitas.

Well Fragment adalah komponen yang baik yang menyalin perilaku dasar Activity, masih bukan komponen aplikasi yang berdiri sendiri seperti Activity dan perlu dilampirkan ke Activity agar dapat bekerja.

Lihat di sini untuk detail lebih lanjut

Gökhan Barış Aker
sumber
1
BTW, Jawaban kedaluwarsa, yang hanya berlaku untuk aplikasi yang ingin bekerja di perangkat yang lebih tua dari API 11.
ToolmakerSteve
@ToolmakerSteve dapatkah Anda memberikan detail lebih lanjut? Jika memungkinkan, dapatkah Anda mengedit jawabannya dengan versi terbaru?
Gökhan Barış Aker
8

Pikirkan FragmentActivity sebagai kelas Kegiatan reguler yang dapat mendukung Fragmen. Sebelum honeycomb, kelas aktivitas tidak dapat mendukung Fragmen secara langsung, jadi ini diperlukan dalam aktivitas yang menggunakan Fragmen.

Jika target distribusi Anda adalah Honeycomb dan di luarnya, Anda dapat memperpanjang Aktivitas sebagai gantinya.

Juga sebuah fragmen harus dianggap sebagai 'sub kegiatan'. Itu tidak bisa ada tanpa aktivitas. Selalu anggap sebuah fragmen sebagai sub kegiatan dan Anda harus baik. Jadi aktivitasnya adalah orang tua dan bagian dari hubungan simbolik anak.

j2emanue
sumber
1

a FragmentActivity adalah aktivitas ad-hoc yang berisi Fragment. Dalam beberapa kata ini saya telah menjelaskan kepada Anda salah satu perubahan penting utama itu, dengan Android 3.0 (HoneyComb), tim android telah memasukkan dalam SDK android.

Dengan jenis konsep baru ini, potongan kode dan tata letak Anda menjadi lebih fleksibel dan dapat dipelihara. Jika Anda mencari di google ada banyak contoh.

Simone Casagranda
sumber