Pengantar:
Pola dasar "Tutorial Fragmen" berbunyi seperti ini:
- Di tablet, ada daftar di sebelah kiri, detail di sebelah kanan.
- Keduanya
Fragments
dan keduanya berada di tempat yang samaActivity
. - Di telepon, buat daftar
Fragment
dalam satuActivity
. - Luncurkan yang baru
Activity
dengan detailnyaFragment
.
(mis. Android 3.0 Fragments API oleh Dianne Hackborn dan the Fragments API Guide )
Di kedua perangkat, fungsionalitas ada di Fragments
. (sederhana)
Di Tablet , seluruh aplikasi adalah 1Activity
, di telepon , ada banyakActivities
.
Pertanyaan:
- Apakah ada alasan untuk membagi aplikasi ponsel menjadi banyak
Activities
?
Satu masalah dengan metode ini, adalah Anda menduplikasi banyak logika di Tablet utama Activity
, dan di Telepon terpisah Activities
.
- Tidakkah akan lebih mudah untuk mempertahankan model 1 Aktivitas dalam kedua kasus, menggunakan logika yang sama untuk beralih
Fragments
masuk dan keluar (hanya menggunakan tata letak yang berbeda)?
Dengan cara ini sebagian besar logika berada di dalam Fragments
dirinya sendiri, dan hanya ada satu Activity
- lebih sedikit duplikasi kode.
Juga apa yang saya baca tentang ActionBarSherlock
itu tampaknya bekerja paling baik dengan Fragments
bukan Activities
(tapi saya belum bekerja dengannya).
Apakah tutorialnya terlalu disederhanakan, atau sudahkah saya melewatkan sesuatu yang utama dalam pendekatan ini?
Kami telah mencoba kedua pendekatan dengan sukses di kantor - tetapi saya akan memulai proyek yang lebih besar dan ingin membuat semuanya semudah mungkin bagi diri saya sendiri.
Beberapa tautan ke pertanyaan terkait:
- Dilema: kapan harus menggunakan Fragmen vs Aktivitas:
- Pola kapan menggunakan Transisi Aktivitas vs Fragmen Dinamis
- Android - Saya perlu klarifikasi fragmen vs aktivitas dan tampilan
- Aktivitas atau fragmen di Android?
- Beberapa fragmen dan desain interaksi kegiatan
- Jadi apa saja keunggulan Fragmen di Android 3.0?
Pembaruan
Mulai karunia pada pertanyaan - masih tidak yakin tentang mengapa saya perlu menduplikasi logika aplikasi saya di aktivitas tablet saya dan di setiap aktivitas ponsel.
Juga menemukan artikel yang menarik oleh orang-orang di Square, yang layak dibaca:
sumber
onItemSelected()
metode dalam Aktivitas. Di aplikasi "asli" saya, saya punya banyak daftar & sublists. Pola ini menunjukkan bahwa Aktivitas Tab saya harus memilikionItemSelected()
metode untuk menangani masing-masing daftar. Ditambah Aktivitas Telepon masing-masing harus memiliki logika yang sama digandakan di dalam masing-masing. IMHO itu jauh lebih baik untuk menempatkan logika Item Selected ke masing-masing Fragmen - tidak ada duplikasi dan saya lebih suka cara penataan kode. Saya harap ini membantuJawaban:
Saya setuju bahwa tutorialnya sangat disederhanakan. Mereka hanya memperkenalkan
Fragments
tetapi saya tidak setuju dengan pola seperti yang disarankan.Saya juga setuju bahwa itu bukan ide yang baik untuk menduplikasi logika aplikasi Anda di banyak Kegiatan (lihat Prinsip KERING di wikipedia ).
Saya lebih suka pola yang digunakan oleh
ActionBarSherlock
aplikasi Demo Fragmen ( unduh di sini dan kode sumber di sini ). Demo yang paling cocok dengan tutorial yang disebutkan dalam pertanyaan adalah yang disebut "Layout" di aplikasi; atauFragmentLayoutSupport
dalam kode sumber.Dalam demo ini, logikanya telah dipindahkan dari
Activity
dan keFragment
. TheTitlesFragment
sebenarnya mengandung logika untuk mengubah Fragmen. Dengan cara ini, setiap Kegiatan sangat sederhana. Untuk menduplikasi banyak Aktivitas yang sangat sederhana, di mana tidak ada logika di dalam Aktivitas, membuatnya sangat sederhana.Dengan memasukkan logika ke dalam Fragmen, tidak perlu menulis kode lebih dari sekali ; itu tersedia terlepas dari Kegiatan yang fragmen ditempatkan. Ini membuatnya menjadi pola yang lebih kuat daripada yang disarankan oleh tutorial dasar.
Keuntungan lain dari pola ABS adalah bahwa Anda tidak berakhir dengan Aktivitas Tablet yang mengandung banyak logika, dan itu berarti Anda menghemat memori. Pola tutorial dapat mengarah ke aktivitas utama yang sangat besar di aplikasi yang lebih kompleks; karena itu perlu menangani logika semua fragmen yang ditempatkan di dalamnya kapan saja.
Secara keseluruhan, jangan menganggapnya sebagai dipaksa untuk menggunakan banyak kegiatan. Anggap saja memiliki kesempatan untuk membagi kode Anda menjadi banyak fragmen, dan menghemat memori saat menggunakannya.
sumber
Saya pikir Anda berada di jalur yang benar. (Dan ya, tutorialnya terlalu disederhanakan).
Dalam tata letak tablet, Anda dapat menggunakan satu Aktivitas dan menukar masuk dan keluar Fragmen (dalam beberapa 'panel'). Saat berada di tata letak ponsel, Anda dapat menggunakan Aktivitas baru untuk setiap Fragmen.
Seperti itu:
Ini mungkin tampak seperti banyak pekerjaan tambahan, tetapi dengan menggunakan beberapa aktivitas untuk ponsel, Anda mengaktifkan daur hidup Aktivitas dasar dan Intent passing. Ini juga memungkinkan kerangka kerja untuk menangani semua animasi dan tumpukan-kembali.
Untuk membantu mengurangi kode Anda dapat menggunakan
BaseActivity
dan memperluas dari itu.Jadi, jika pengguna memiliki tablet, Anda akan menggunakan
MyMultiPaneFragActivity
atau sesuatu yang serupa. Aktivitas ini bertanggung jawab untuk mengelola panggilan balik dari fragmen dan tujuan perutean ke fragmen yang benar (seperti maksud pencarian)Jika pengguna memiliki telepon, Anda dapat menggunakan Aktivitas biasa dengan kode yang sangat sedikit dan memperpanjangnya
MyBaseSingleFragActivity
atau yang serupa. Kegiatan ini bisa sangat sederhana, 5-10 baris kode (bahkan mungkin kurang).Bagian yang sulit adalah mengarahkan maksud dan yang lainnya. * (Edit: lihat lebih lanjut di bawah).
Saya pikir alasan ini adalah cara yang disarankan adalah untuk menghemat memori dan mengurangi kerumitan dan kopling. Jika Anda menukar Fragmen,
FragmentManager
mempertahankan referensi untuk Fragmen untuk tumpukan-kembali. Ini juga menyederhanakan apa yang seharusnya 'berjalan' untuk pengguna. Pengaturan ini juga memisahkan pandangan dan tata letak dan logika dalam Fragmen dari siklus hidup Aktivitas. Dengan cara ini Fragmen dapat ada dalam satu aktivitas, di samping fragmen lain (dua-pane), atau dalam Aktivitas tiga-pane, dll.* Salah satu manfaat memiliki perutean maksud reguler adalah Anda dapat meluncurkan suatu Kegiatan secara eksplisit dari mana saja di tumpukan belakang. Salah satu contoh mungkin dalam hal hasil pencarian. (MySearchResults.class).
Baca di sini untuk informasi lebih lanjut:
http://android-developers.blogspot.com/2011/09/preparing-for-handsets.html
sumber
Berikut ini adalah jawaban Reto Meier mengenai hal yang sama, yang diambil dari video ini dari tentu saja Android Fundamental Udacity ini .
sumber
Dalam pola master-detail, ada dua kegiatan. Satu menunjukkan kedua fragmen pada layar yang lebih besar dan hanya fragmen "master" pada layar yang lebih kecil. Yang lain menunjukkan fragmen "detail" pada layar yang lebih kecil.
Logika detail Anda harus diikat ke dalam fragmen detail. Oleh karena itu, tidak ada duplikasi kode yang terkait dengan logika detail antara aktivitas - aktivitas detail hanya menampilkan fragmen detail, mungkin meneruskan data dari
Intent
ekstra.ActionBarSherlock tidak lebih terkait dengan fragmen daripada bilah tindakan asli, karena ActionBarSherlock adalah murni backport dari bilah tindakan asli.
sumber
Mengacu pada pertanyaan pertama "Apakah ada alasan untuk membagi aplikasi ponsel menjadi banyak Kegiatan?" - Iya. itu hanya datang ke ruang yang tersedia, Tablet memberi lebih banyak ruang untuk pengembang, sehingga memungkinkan pengembang untuk menempatkan lebih banyak di satu layar. Android memberi tahu kami bahwa Aktivitas dapat menyediakan layar . Jadi Yang dapat Anda lakukan dengan 1 layar besar di tablet, adalah sesuatu yang mungkin harus disebar di beberapa layar di ponsel, karena tidak ada ruang yang cukup untuk semua fragmen.
sumber