Fragmen atau Fragmen Dukungan?

125

Saya mengembangkan aplikasi yang mendukung Android> = 4.0. Ini menggunakan fragmen dari android.apppaket. Karena saya menghadapi masalah dengan implementasi fragmen yang lebih lama di 4.0, seperti ini , yang sudah diperbaiki di perpustakaan dukungan, saya sedang mempertimbangkan untuk beralih kembali ke implementasi fragmen dari perpustakaan dukungan untuk mendapatkan implementasi yang lebih andal dan konsisten.

Apa pendapat Anda tentang ini? Apakah Anda menggunakan fragmen dari perpustakaan dukungan, meskipun sudah tersedia, ketika mengembangkan untuk Android 4?

brillenheini
sumber
2
Ini pertanyaan yang bagus (+1 karena itu membuat saya penasaran). Juga tidak ada penjelasan yang baik di web untuk ini. Saya menggunakan pustaka dukungan untuk aplikasi saya dan saya ingin tahu apakah saya salah atau tidak, karena saya tidak melihat adanya kesalahan saat kompilasi atau selama pengujian.
JJ86
2
@animuson Jawaban oleh brillenheini membuktikan bahwa ini bukan jawaban berdasarkan pendapat.
OneWorld

Jawaban:

90

Dari pengalaman saya, menggunakan implementasi fragmen yang sama pada semua perangkat Android adalah keuntungan besar. Saya tidak bisa menyingkirkan semua NullPointerExceptions ketika negara disimpan di Android 4.0 menggunakan fragmen asli, dengan perpustakaan dukungan mereka semua hilang. Saya juga tidak bisa melihat kelemahan apa pun sejauh ini dengan pendekatan ini.

Jadi jawaban saya untuk pertanyaan saya sendiri sekarang: Ketika mengembangkan untuk Android 4.x, menggunakan fragmen dari perpustakaan dukungan adalah ide yang bagus. Pustaka dukungan memiliki bug yang diperbaiki yang masih ada dalam implementasi fragmen yang lebih lama dan sering diperbarui dengan lebih banyak perbaikan bug.

brillenheini
sumber
11
Jadi apa tujuan dari android.app.Fragmentitu? Jika Anda dapat menambahkan ini ke jawaban Anda di sini dengan sedikit penjelasan, saya akan sangat puas. Terima kasih!
Jonstaff
1
@jonstaff Alasannya mungkin bersejarah. Silakan lihat jawaban saya yang diperbarui di sana.
brillenheini
11
Demi kelengkapan, tampaknya ada hal-hal yang tidak dapat dilakukan oleh fragmen pendukung (misalnya dianimasikanobjectAnimator , bahkan jika OS target yang sebenarnya mendukungnya). Yang mana, jika Anda menggunakan ViewPager, berarti Anda harus menggunakan adaptor dari pustaka dukungan v13, jika tidak, Anda tidak dapat memiliki viewpager dan membalik animasi.
GSerg
5
Juga berhati-hatilah, pada Agustus 2014, pustaka v13 tidak dapat mengerjakan Nested Fragments.
Martin Marconcini
1
Mengapa orang-orang di google memilih untuk menggunakan pustaka v13 untuk aplikasi iosched github.com/google/iosched/blob/master/android/src/main/java/com/… , mereka harus memiliki alasan
sebelum
40

Salah satu alasan utama untuk tetap menggunakan SupportFragmentuntuk sementara waktu adalah bahwa Anda tidak memiliki akses ke ChildFragmentManagerAPI 17. Perpustakaan dukungan akan memberi Anda versi dukungan dari manajer fragmen anak.

Ini menjadi masalah besar jika Anda memiliki fragmen yang berisi fragmen lain. Ini biasa terjadi pada aplikasi tablet dengan kompleksitas yang tinggi dan / atau arsitektur keseluruhan Anda didasarkan pada tata letak tab atau menggunakan laci navigasi.

Ross Hambrick
sumber
21

Saya juga merasa frustrasi karena harus menyertakan pustaka dukungan, meskipun menargetkan Android 4.0+ - tetapi tampaknya ini direkomendasikan secara resmi:

Paket Perpustakaan Dukungan Android berisi beberapa perpustakaan yang dapat disertakan dalam aplikasi Anda. Masing-masing pustaka ini mendukung serangkaian versi platform Android tertentu dan serangkaian fitur.

Panduan ini menjelaskan fitur-fitur penting dan dukungan versi yang disediakan oleh Perpustakaan Dukungan untuk membantu Anda memutuskan yang mana yang harus Anda sertakan dalam aplikasi Anda. Secara umum, kami sarankan untuk menyertakan dukungan v4 dan pustaka appcompat v7, karena mendukung berbagai versi Android dan menyediakan API untuk pola antarmuka pengguna yang disarankan.

http://developer.android.com/tools/support-library/features.html

sourabhj
sumber
Ini harus menjadi jawaban yang diterima, terlepas dari kenyataan bahwa @brillenheini memberikan jawaban sendiri. Ini menjawab pertanyaan dengan akurasi dan keringkasan terbaik.
Arvindh Mani
4

IMHO jika Anda berencana untuk mengembangkan untuk 4.0 saja, saya akan merekomendasikan pergi dengan perpustakaan asli karena executable akan semakin kecil. Memang benar bahwa Anda mungkin mengalami masalah bug di versi awal, tapi saya pikir sebagian besar harus cukup sepele untuk diselesaikan. Juga perpustakaan kompatibilitas seharusnya memetakan ke fragmen asli jika Anda menjalankan pada 4.0 dan lebih tinggi pula. Jadi, Anda mungkin akhirnya harus bergumul dengan masalah-masalah semacam ini. Masalah dengan pustaka dukungan adalah bahwa Anda memiliki banyak kelas muncul 2x (sekali dalam struktur paket dukungan dan sekali dalam struktur paket "asli") yang membuat pengembangan sedikit lebih rumit.

Namun, jika Anda ingin juga merilis aplikasi Anda sebelum 4.0 maka tidak ada jalan lain di perpustakaan dukungan. Juga karena ada sekitar 38% dari semua pengguna di 2.3 mungkin masuk akal untuk memasukkan versi OS ini. Dalam kasus seperti itu Anda dapat menggunakan perpustakaan dukungan dalam kombinasi dengan Jake Wartons ActionBarSherlock (atau dengan googles mendukung Perpustakaan ActionBar setelah akhirnya dirilis).

RaB
sumber
3
Terima kasih atas jawaban anda. Karena saya memerlukan ViewPager, saya harus memasukkan pustaka dukungan. Juga, fragmen dukungan tidak mencoba untuk beralih ke implementasi asli jika tersedia. Itu yang dikatakan dokter .
brillenheini
Ya, masalahnya adalah (seperti yang dikatakan @brillenheini) bahwa untuk memiliki ViewPager Anda memerlukan v4, jadi bahkan jika Anda hanya menargetkan perangkat v13 + Anda tetap akan selesai memiliki v4.
Sotti
Saya juga baru tahu (ViewPager perlu v4) di API 21 dan di aplikasi saya. Meh: - /
mraviator