Saat mengembangkan untuk Android
, Anda bisa menyetel target (atau minimum) sdk ke 4 (API 1.6) dan menambahkan paket kompatibilitas android (v4) untuk menambahkan dukungan Fragments
. Kemarin saya melakukan ini dan berhasil menerapkan Fragments
untuk memvisualisasikan data dari kelas khusus.
Pertanyaan saya adalah ini: apa keuntungan menggunakan Fragments
dibandingkan dengan hanya mendapatkan View dari objek kustom, dan masih mendukung API 1.5?
Misalnya, saya memiliki kelas Foo.java:
public class Foo extends Fragment {
/** Title of the Foo object*/
private String title;
/** A description of Foo */
private String message;
/** Create a new Foo
* @param title
* @param message */
public Foo(String title, String message) {
this.title = title;
this.message = message;
}//Foo
/** Retrieves the View to display (supports API 1.5. To use,
* remove 'extends Fragment' from the class statement, along with
* the method {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)})
* @param context Used for retrieving the inflater */
public View getView(Context context) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.foo, null);
TextView t = (TextView) v.findViewById(R.id.title);
t.setText(this.title);
TextView m = (TextView) v.findViewById(R.id.message);
m.setText(this.message);
return v;
}//getView
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (container == null) {
return null;
}
View v = inflater.inflate(R.layout.foo, null);
TextView t = (TextView) v.findViewById(R.id.title);
t.setText(this.title);
TextView m = (TextView) v.findViewById(R.id.message);
m.setText(this.message);
return v;
}//onCreateView
}//Foo
Kedua metode tersebut sangat sederhana untuk dibuat dan digunakan dalam sebuah Aktivitas yang, katakanlah, harus List<Foo>
ditampilkan (misalnya, secara terprogram menambahkan masing-masing ke a ScrollView
), jadi Fragments
benar - benar semua itu berguna, atau apakah itu hanya penyederhanaan yang terlalu dimuliakan. mendapatkan View, seperti melalui kode di atas?
Jawaban:
Alasan utama menggunakan Fragmen adalah karena fitur backstack dan siklus proses. Jika tidak, tampilan kustom lebih ringan dan lebih mudah diterapkan.
Awalnya, saya benar-benar mencoba membuat aplikasi ponsel / tablet menggunakan tampilan khusus. Semuanya tampak berfungsi di seluruh ponsel DAN tablet, bahkan beralih dari satu panel ke panel terpisah. Di mana saya mengalami masalah adalah dengan tombol kembali dan siklus hidup. Karena saya hanya memperbarui tampilan secara manual ... tidak ada yang melacak riwayat tampilan dan statusnya. Oleh karena itu, tombol kembali tidak berfungsi seperti yang diharapkan dan sulit untuk membuat ulang bahkan status terbaru selama peristiwa siklus hidup, seperti saat memutar aplikasi. Untuk memperbaikinya, saya harus membungkus tampilan kustom saya dalam fragmen dan menggunakan FragmentManager sehingga status sebelumnya akan disimpan dan dibuat ulang.
Saya menyadari setelah menjawab bahwa saya memposting pertanyaan serupa setahun sebelumnya: https://stackoverflow.com/a/11126397/618881
sumber
Menurut saya, Fragmen berguna dalam dua skenario: jika Anda membagi tampilan pada beberapa perangkat / orientasi dan menampilkannya dalam dua aktivitas dan menampilkan semua konten di satu perangkat lain. Itu akan menjadi kasus penggunaan jika Anda menggunakan tablet atau bahkan mungkin dalam mode lanskap di ponsel: misalnya Anda menampilkan daftar item dan detailnya pada satu layar. di ponsel atau dalam mode potret Anda hanya menampilkan satu bagian.
Kasus penggunaan lainnya adalah tampilan yang dapat digunakan kembali. Jadi, jika Anda memiliki beberapa tampilan yang terlihat pada aktivitas berbeda dan juga melakukan beberapa tindakan, Anda dapat menempatkan perilaku ini ke dalam sebuah fragmen lalu menggunakannya kembali. Jelas Anda mungkin bisa melakukannya dengan widget khusus juga.
Saya tidak melihat alasan apa pun untuk menggunakan Fragmen untuk setiap Tampilan dan saya rasa itu hanya akan menjadi overhead. Saya hanya menggunakannya dalam kasus penggunaan pertama dan saya akan mengatakan di sini ini adalah penyederhanaan.
sumber
Di sini Anda dapat membaca lebih lanjut.
sumber
Skenario satu bagus jika Anda memiliki aplikasi sederhana.
Skenario dua bagus jika Anda ingin memiliki Banyak Fragmen dan beberapa FragmenActivities dan Anda dapat menggabungkan masing-masing. Anda juga dapat membuat interaksi antar fragmen.
Saya telah membagi Fragmentactivity layar, saya dapat memanggilnya dengan 'Intent Extras' dan memberi tahu fragmentActivity fragmen mana yang akan dimuat. Fragmen bagus karena tidak dalam bentuk manifes sehingga Anda dapat membuat fragmen dan FragmentActvity yang dapat digunakan kembali.
Tapi itu membuat proyek Anda lebih besar. Tetapi jika Anda membuat proyek besar, Anda dapat menghemat banyak. Karena Anda dapat menggunakan Fragmen yang sama atau aktivitas Fragmen yang sama.
Dan saya pikir fragmen ini datang sedikit terlambat jadi Anda harus mencoba berpikir dengan cara baru. Mungkin hanya mencoba mengubah aktivitas Anda menjadi FragmentActivity. Kemudian coba temukan kode yang dapat digunakan kembali dan buat Fragmen darinya.
Ini berguna tetapi saya tidak tahu caranya sekarang. Tapi saya punya beberapa ide.
Ini selalu menjadi masalah. Tim Android membuat sesuatu berpikir dan tidak ada yang tahu kegunaannya. Karena kita hampir tidak belajar seperti dulu dan ini dia beberapa hal baru.
Menurut saya itu bagus tapi bukan karena alasan yang diberitahukan google kepada kita.
sumber
Tambahkan satu kasus saat menggunakan Fragmen atau Aktivitas melalui CustomView:
Saat Anda menggunakan CursorLoader untuk mengamati tampilan tertentu, ListView atau TextView dan ingin memperbarui nilai tampilannya setiap kali data ContentProvider Anda diperbarui di bagian belakang (kasus paling umum Anda memiliki layanan yang memperbarui database lokal Anda dengan mengumpulkan data dari database / cloud jarak jauh secara berkala )
sumber
Satu hal besar yang tidak disebutkan oleh semua komentar di atas adalah bahwa fragmen tetap tersimpan di memori meskipun Android mematikan aktivitas dan memulai ulang ketika Anda melakukan sesuatu seperti mengubah orientasi perangkat Anda. Hal ini dilakukan karena alasan performa, tetapi juga dapat menyebabkan hasil yang tidak diharapkan jika Anda mengharapkan fragmen dimusnahkan hanya untuk mengetahui bahwa fragmen tersebut dibuat ulang entah dari mana.
sumber