Saya berpikir untuk mengimplementasikan satu layar dengan Activity
dan semua layar lainnya dengan Fragments
dan managing all the fragments thru the activity
.
Apakah itu ide yang bagus? dan jawaban saya TIDAK, tetapi saya masih ingin tahu lebih jelas tentang pemikiran ini.
Apa pro dan kontra dari gagasan itu?
catatan:
Tolong jangan beri saya tautan untuk fragmen dan aktivitas.
EDIT:
Berikut ini sesuatu di atas Fragmen dan aktivitas:
Pro:
- Fragmen dimaksudkan untuk digunakan dengan kegiatan sebagai sub kegiatan.
- Fragmen bukan pengganti kegiatan.
- Fragmen dimaksudkan untuk reusability (Perlu tahu bagaimana reusability dapat dicapai.).
- Fragmen adalah cara terbaik untuk menulis kode untuk mendukung tablet dan ponsel.
Cons:
- Kita perlu mengimplementasikan antarmuka untuk mendapatkan data dari fragmen.
- Untuk dialog, kita harus menunjukkannya.
Mengapa kita harus menggunakan fragmen jika kita tidak mempertimbangkan tablet? Apa perbedaan waktu mulai antara aktivitas dan fragmen?
Jawaban:
Itu tergantung pada aplikasi yang Anda buat. Saya telah membuat beberapa aplikasi menggunakan kedua pendekatan dan tidak bisa mengatakan satu cara selalu lebih baik dari yang lain. Aplikasi terbaru yang saya buat saya menggunakan
Activity
pendekatan tunggal dan navigasi gaya Facebook. Ketika memilih item dari daftar navigasi saya memperbarui satuFragment
wadah untuk menampilkan bagian itu.Yang mengatakan, memiliki satu
Activity
juga memperkenalkan banyak kompleksitas. Katakanlah Anda memiliki formulir edit, dan untuk beberapa item yang perlu dipilih, atau dibuat, pengguna harus membawanya ke layar baru. Dengan aktivitas kami hanya akan memanggil layar baru denganstartActivityForResult
tetapi denganFragments
tidak ada hal seperti itu sehingga Anda akhirnya menyimpan nilai padaActivity
dan memiliki fragmen edit utama memeriksaActivity
untuk melihat apakah data telah dipilih dan harus ditampilkan kepada pengguna.Apa yang dikatakan Aravind tentang terjebak pada satu
Activity
tipe juga benar tetapi tidak terlalu membatasi. Aktivitas Anda akan menjadi FragmentActivity dan selama Anda tidak membutuhkannyaMapView
maka tidak ada batasan nyata. Jika Anda ingin menampilkan peta, itu bisa dilakukan, tetapi Anda harus memodifikasi Perpustakaan Kompatibilitas Android untukFragmentActivity
memperpanjangMapActivity
atau menggunakan yang tersedia untuk umum android-support-v4-googlemaps yang tersedia untuk umum .Pada akhirnya sebagian besar devs yang saya tahu yang pergi
Activity
rute telah kembali ke beberapa Aktivitas untuk menyederhanakan kode mereka. UI bijaksana, pada tablet, Anda beberapa kali terjebak menggunakan tunggalActivity
hanya untuk mencapai interaksi gila yang pernah dibuat oleh desainer Anda :)- EDIT -
Google akhirnya dirilis
MapFragment
ke perpustakaan kompatibilitas sehingga Anda tidak perlu lagi menggunakan hack android-support-v4-googlemaps. Baca tentang pembaruan di sini: Google Maps Android API v2- EDIT 2 -
Saya baru saja membaca posting hebat ini tentang keadaan fragmen modern (2017) dan mengingat jawaban lama ini. Pikir saya akan berbagi: Fragmen: Solusi untuk Semua Masalah Android
sumber
settargetfragment
dan Anda dapat menangani aktivitas sepertistartforresult
prosedur.Saya akan menyelesaikan proyek (5 bulan dalam pengembangan), yang memiliki 1 aktivitas, dan 17 fragmen, semua layar penuh. Ini adalah proyek berbasis fragmen kedua saya (sebelumnya adalah 4 bulan).
Pro
finish()
semua kegiatan yang tidak terlihat, dan membuat logika kontrol yang sama untuk navigasi, seperti yang akan saya lakukan dengan fragmen. Mungkin juga melakukannya dengan fragmen hanya karena ini.Cons
sumber
Pertama, apa pun yang Anda lakukan, pastikan Anda memiliki desain modular menggunakan model, tampilan, presenter yang tidak terlalu bergantung pada suatu Kegiatan atau Fragmen.
Apa yang disediakan oleh Aktivitas dan Fragmen?
Karena itu, gunakan mereka untuk itu, SAJA . Mereka memiliki tanggung jawab yang cukup, jangan terlalu menyulitkan mereka. Saya berpendapat bahwa bahkan mengintensifkan TextView dalam Aktivitas atau Fragmen adalah praktik yang buruk. Ada metode alasan seperti public View findViewById (int id) adalah PUBLIK .
Sekarang pertanyaannya menjadi lebih sederhana: Apakah saya perlu beberapa peristiwa siklus hidup independen dan backstacks? Jika Anda berpikir ya mungkin, gunakan fragmen. Jika Anda berpikir tidak pernah, jangan gunakan fragmen.
Pada akhirnya, Anda bisa membuat backstack dan siklus hidup Anda sendiri. Tetapi, mengapa menciptakan kembali roda?
EDIT: Mengapa memilih ini? Kelas tujuan tunggal! Setiap aktivitas atau fragmen harus dapat membuat instantiate presenter yang instantiate tampilan. Presenter dan view adalah modul yang dapat dipertukarkan. Mengapa suatu kegiatan atau fragmen memiliki tanggung jawab presenter ??
sumber
Pro
Anda dapat mengontrol fragmen Anda dari satu aktivitas, karena semua fragmen independen satu sama lain. Fragmen memiliki siklus hidup (
onPause
,onCreate
,onStart
...) mereka sendiri. Dengan memiliki siklus hidup, fragmen dapat merespons secara independen terhadap peristiwa, menyelamatkan negara mereka melaluionSaveInstanceState
, dan dibawa kembali (yaitu seperti ketika melanjutkan kembali setelah panggilan masuk atau ketika pengguna mengklik tombol kembali).Cons
Namun demikian, itu ide yang cukup bagus, seolah-olah Anda perlu membuat aplikasi, di mana Anda ingin menampilkan beberapa tampilan. Dengan gagasan ini, Anda akan dapat melihat beberapa fragmen dalam satu tampilan ..
sumber
Itu tergantung pada tata letak desain aplikasi Anda. Misalkan jika Anda menggunakan Tabs di ActionBar dalam tata letak desain maka dalam Aktivitas Tunggal aplikasi seseorang dapat memiliki fragmen yang diubah pada klik Tab. Jadi sekarang Anda memiliki Kegiatan dan anggaplah tiga Tab di ActionBar dan tampilan untuk tab yang disediakan oleh Fragmen, yang membuatnya mudah untuk mengelola plus juga layak. Jadi, semuanya tergantung pada skema desain aplikasi Anda dan bagaimana Anda mengambil keputusan untuk membuatnya.
sumber
Pro:
Cons:
Saya percaya ini adalah ide yang baik, karena menggunakan tata letak xml berbeda berdasarkan pada ukuran dan orientasi layar saat ini dapat membuat aplikasi lebih bermanfaat dan mengurangi kebutuhan untuk merilis beberapa versi aplikasi Anda jika Anda berencana untuk merilis aplikasi Anda untuk ponsel dan tablet. Jika aplikasi Anda tidak akan pernah digunakan oleh tablet dan ponsel, itu mungkin tidak sepadan dengan masalahnya.
sumber
Saya seorang pendukung menunda semua tampilan inflasi ke fragmen untuk memberikan fleksibilitas yang lebih baik. Misalnya memiliki aktivitas pendaratan tunggal untuk tablet yang mengagregasi banyak fragmen dan menggunakan kembali fragmen yang sama pada ponsel untuk menampilkan satu layar per fragmen. Namun dalam implementasi ponsel saya akan memiliki aktivitas terpisah untuk setiap layar. Kegiatan tidak akan memiliki terlalu banyak kode karena mereka akan segera tunduk kepada mitra fragmen mereka untuk melihat inflasi.
Saya pikir itu adalah ide yang buruk untuk implementasi ponsel harus mengubah ke aktivitas pendaratan tunggal ketika tab atau menu geser diperkenalkan karena navigasi tab atau menu hanya menghasilkan layar yang sama sekali baru.
sumber
Alasan paling penting yang akan saya berikan untuk tidak menggunakan pendekatan aktivitas tunggal adalah agar siklus hidup aktivitas dapat dimanfaatkan. Kegiatan mengandung perilaku kontekstual dari bagian tertentu dari aplikasi dan fragmen melengkapi perilaku itu. Memiliki kemampuan untuk mengambil keuntungan dari langkah-langkah yang dapat ditimpa dalam siklus hidup kegiatan membantu untuk memisahkan perilaku satu kegiatan dari yang lain dengan metode seperti
onPause
danonResume
. Siklus hidup ini juga memungkinkan Anda kembali ke konteks sebelumnya. Dengan pendekatan aktivitas tunggal, begitu Anda meninggalkan sebuah fragmen, Anda harus membuat mekanisme untuk kembali ke sana.sumber