Perbedaan antara android.app.Fragment dan android.support.v4.app.Fragment


175

Apa perbedaan antara android.app.Fragmentdan android.support.v4.app.Fragment, dan bagaimana keadaan di mana masing-masing harus digunakan?

Jawaban:


288

android.support.v4.app.Fragmentadalah kelas Fragment di pustaka dukungan android, yang merupakan paket kompatibilitas yang memungkinkan Anda untuk menggunakan beberapa fitur Android yang lebih baru pada versi Android yang lebih lama.

android.app.Fragmentadalah kelas Fragment dalam versi asli Android SDK. Itu diperkenalkan di Android 3 (API 11).

Jika Anda ingin membuat aplikasi Anda menggunakan fragmen, dan ingin menargetkan perangkat sebelum API 11, Anda harus menggunakannya android.support.v4.app.Fragment. Namun, jika Anda hanya menargetkan perangkat yang menjalankan API 11 atau lebih, Anda dapat menggunakannya android.app.Fragment.

Sunting: OS yang ada android.app.Fragment sekarang sudah usang (pada API level 28), dan semua orang harus pindah ke menggunakan implementasi perpustakaan dukungan.


4
Juga lihat "Menggunakan FragmentStatePagerAdapter TANPA perpustakaan dukungan": stackoverflow.com/questions/18512294/…
CJBS

Jika Anda mengganti onAttach (), silakan lihat utas ini untuk menghindarinya tidak dipanggil dalam beberapa keadaan dengan android.app.Fragment: stackoverflow.com/questions/32083053/…
Hong

3
akan menggunakan Androidx: androidx.fragment.app.Fragment
Abhijit Kurane

56

Mulai 2018:

Dari android.app.Fragment dokumentasi :

Kelas ini sudah tidak digunakan lagi di API level 28.
Gunakan Perpustakaan Dukungan Fragmentuntuk perilaku yang konsisten di semua perangkat dan akses ke Siklus Hidup.

Jadi fragmen pendukung ( android.support.v4.app.Fragment) harus digunakan di mana-mana alih-alih fragmen asli ( android.app.Fragment) sekarang.


@Artyom, sebagai noob untuk pengembangan android, saya berharap bahwa ketika android.app.Fragmentkelas itu ditinggalkan, bahwa API level 28 akan memiliki alternatif, mungkin pendekatan penggantian radikal. Apakah ada pendekatan ke depan atau apakah ini kompatibel android.support.v4.app.Fragmentdengan pendekatan yang tepat?
ergohack

1
@ergohack Lihat seperti itu: untuk kode java Anda bisa memasukkan bytecode di dalam runtime perangkat atau di dalam file jar aplikasi. Kode pustaka dukungan akan dimasukkan ke dalam toples Anda, dan menyediakan fitur yang sama dengan kode yang disediakan runtime, jadi tidak ada alasan untuk tidak menggunakan pustaka dukungan yang modern dan dipelihara alih-alih kode yang lama dan tidak terawat dari ponsel target Anda.
Pierre

12

Saya menggunakan android.support.v4.app.Fragmentsecara eksklusif.

Semua aplikasi yang saya tulis harus mendukung segera kembali ke Android 2.3 dan ini adalah cara termudah untuk melakukannya.

Jika Anda mendukung 11+ maka patuhi android.app.Fragment.


18
Dalam hal ini Anda kehilangan banyak fitur yang ada di perpustakaan dukungan tetapi hanya di yang asli setelah level API tertentu. getChildFragmentManager () misalnya tidak tersedia hingga level 17. Saran saya adalah hanya menggunakan fragmen dukungan dan berpura-pura bahwa yang asli tidak ada.
Johan

4

Jika aplikasi Anda ditargetkan untuk API 11 atau lebih, Anda dapat menggunakan android.app.Fragmentdan file APK Anda akan lebih kecil.

Jika tidak, tambahkan android.support.v4.app.Fragmentperpustakaan ke proyek Anda untuk mendukung versi API Android yang lebih lama (Android 3.x).


2

android.support.v4.app.Fragment adalah pustaka yang dapat Anda gunakan untuk mendapatkan kompatibilitas ke belakang untuk versi API yang lebih lama.

Fragmen ditambahkan pada API level 11 (bersama dengan fitur lainnya) Anda harus menyertakan pustaka itu untuk memperluas fungsi tersebut ke perangkat pra-API 11. Itu adalah pustaka yang berguna dan saya sarankan untuk melihat ActionBarSherlock, yang memperluas panel tindakan ke perangkat pra-API v11.


-2

Jika aplikasi Anda ditargetkan untuk API 11 atau di atas level, Anda dapat menggunakan android.app.Fragment dan itu akan mengurangi ukuran APK. Kalau tidak, gunakan android.support.v4.app.Fragment

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.