Pertanyaan saya terlepas dari perbedaan warisan yang jelas, apa perbedaan utama antara Fragment
dan FragmentActivity
? Untuk skenario apa setiap kelas paling cocok? Saya mencoba memahami mengapa kedua kelas ini ada ...
Pertanyaan saya terlepas dari perbedaan warisan yang jelas, apa perbedaan utama antara Fragment
dan FragmentActivity
? Untuk skenario apa setiap kelas paling cocok? Saya mencoba memahami mengapa kedua kelas ini ada ...
Jawaban:
A Fragment
adalah bagian dari Activity
, yang memiliki:
Activity
sedang berjalan.A Fragment
harus selalu disematkan dalam Activity
.
Fragments
bukan bagian dari API sebelum HoneyComb (3.0). Jika Anda ingin menggunakan Fragments
dalam aplikasi yang menargetkan versi platform sebelum HoneyComb, Anda perlu menambahkan Paket Dukungan ke proyek Anda dan menggunakan FragmentActivity
untuk menahan Anda Fragments
. The FragmentActivity
kelas memiliki API untuk menangani Fragments
, sedangkan Activity
kelas, sebelum Honeycomb, tidak.
Jika proyek Anda hanya menargetkan HoneyComb atau lebih baru, Anda harus menggunakan Activity
dan tidak FragmentActivity
menahan Fragments
.
Beberapa detail:
Gunakan android.app.Fragment
dengan Activity
. Gunakan android.support.v4.app.Fragment
dengan FragmentActivity
. Jangan menambahkan paket dukungan Fragment
ke Activity
karena akan menyebabkan Pengecualian terlempar.
Suatu hal yang harus diperhatikan: FragmentManager
dan LoaderManager
memiliki versi dukungan terpisah untuk FragmentActivity:
Jika Anda menggunakan Fragment
dalam Activity
(HoneyComb dan atas), hubungi
getFragmentManager()
mendapatkan android.app.FragmentManager
getLoaderManager()
mendapatkan android.app.LoaderManager
jika Anda menggunakan a Fragment
dalam 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 Activity
dalamnya, ia tidak harus menjadi bagian dari Activity
tata letak. Ini dapat digunakan sebagai pekerja tak terlihat untuk aktivitas tersebut, tanpa UI sendiri.
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
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.
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.