• onResume()
Activity sudah terlihat dan pengguna sudah dapat berinteraksi. Di sini adalah tempat
terbaik untuk menjalankan animasi, membuka akses seperti camera, mengupdate UI, dll.
Method dalam lifecycle (Cont.)
• onPause()
Kebalikan dari onResume(). Activity sudah akan bersiap-siap meninggalkan layar (masih terlihat) dan
sudah tidak berinteraksi dengan pengguna. Biasanya bila perlu melakukan undo untuk pekerjaan yang
dilakukan di onResume() kita lakukan di sini.
• onStop()
Kebalikan dari onStart() Activity sudah tidak terlihat. Biasanya kita melakukan undo untuk pekerjaan
yang dilakukan di dalam onStart().
• onDestroy()
Kebalikan dari onCreate(). Method ini dapat terpanggil karena memanggil method finish() atau karena
sistem membutuhkan memori lebih. Di dalam onDestroy() kita biasanya membersihkan proses-proses
yang ada di belakang layar. Misalnya pengunduhan data dari internet yang mungkin masih berjalan
jika tidak dihentikan di onDestroy().
Method dalam lifecycle (Cont.)
• onRestart()
Dipanggil saat activity sudah melalui onStop() tapi akan diaktifkan lagi. Method
ini jarang di implementasi.
Fragment
What is a Fragment?
• Fragment adalah sebuah reuseable class yang mengimplement
beberapa fitur sebuah Activity. Fragment biasanya dibuat sebagai
bagian dari suatu antarmuka. Sebuah fragment harus berada di dalam
sebuah activity, mereka tidak dapat berjalan sendiri tanpa adanya
activity tempat mereka menempel.
Memahami Fragment
Berikut ini beberapa hal yang perlu dipahami tentang fragment:
• Sebuah Fragment merupakan kombinasi sebuah layout XML dan kelas
java yang mirip dengan sebuah Activity.
• Dengan menggunakan support library, fragment dapat mendukung
hampir semua versi Android.
• Fragment dapat dipakai berulang kali didalam activity.
• Fragment merupakan komponen utuh yang memiliki view, event,
dan logic (meskipun tetap membutuhkan sebuah fragment agar dapat
bekerja).
Peran Fragment
Dalam arsitektur berorientasi fragment, activity menjadi navigational
container yang bertugas untuk melakukan navigasi ke activity lain,
menampilkan fragment dan mengirim data.
Pentingnya Sebuah Fragment
• Ada banyak kasus yang dapat diselesaikan menggunakan fragment, namun yang
paling umum adalah:
• Penggunaan Komponen View dan Logic Berulang Kali - Fragment dapat dipakai untuk
menampilkan data atau melakukan event tertentu dibeberapa activity berbeda.
• Dukungan Untuk Tablet - Dibeberapa aplikasi, versi tablet dari sebuah activity
memberikan layout yang berbeda dari versi handphone yang juga berbeda dari versi
TV. Fragment memungkinkan activity untuk menggunakan fragment dalam membuat
antarmuka sesuai dengan perangkat yang membukanya.
• Orientasi Layar - Seringkali dalam aplikasi, versi portrait dan landscape sebuah aplikasi
memiliki layout yang berbeda. Fragment memungkinkan kedua orientasi tersebut
untuk menggunakan tampilan yang berbeda menggunakan elemen yang sama.
Mengorganisasi Kode Fragment
Dalam aplikasi yang menggunakan banyak fragment, kita perlu selalu
ingat untuk mengorganisasikan kode kita agar mengikuti best practice.
Di dalam sebuah aplikasi yang memakai banyak fragment, kita harus
selalu ingat fungsi dari perpindahan activity.
Activity vs Fragment
• Activity adalah navigation controller yang bertugas untuk:
• Pindah ke activity lain melalui intent.
• Menampilkan komponen navigasi seperti navigation drawer atau
viewpager.
• Menampilkan dan menyembunyikan fragment tertentu menggunakan
fragment manager.
• Menerima data dari intent yang mengirim data antar fragment.
Activity vs Fragment (Cont.)
• Fragments adalah content controllers dan memiliki view, layout, serta
event logic sendiri:
• Layout dan view menampilkan konten aplikasi yang relevan.
• Melakukan management view seperti visibility atau error handling.
• Memulai network request melalui objek klien.
• Menerima dan menyimpan data dari atau ke database.
Membuat Sebuah Fragment
• Sebuah fragment, seperti activity, memiliki XML layout-nya sendiri
dan sebuah kelas java sebagai controller dari Fragment tersebut.
• Layout XML yang dimiliki oleh fragment, sama seperti layout-layout
lainnya dan bisa memiliki nama apa saja (selama memiliki format yang
ditentukan). Anggap kita memiliki layout sebagai berikut:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
import android.support.v4.app.Fragment;
<fragment
android:name="com.example.android.FooFragment"
android:id="@+id/fooFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
Catatan
• Kita tidak dapat mengganti fragment yang ditambahkan secara statis
lewat file XML menggunakan FragmentTransaction (baca di bawah).
Kita hanya bisa mengganti fragment yang ditempelkan secara dinamis.
Menempelkan Fragment Secara Dinamis
• Cara yang kedua ialah dengan menempelkan fragment secara dinamis
menggunakan Java dengan melalui FragmentManager.
Kelas FragmentManager dan kelas FragmentTransaction
memungkinkan kita untuk menambah, menghapus dan menimpa
fragment yang ada di layout saat activity sedang aktif.
• Dalam kasus ini kita membutuhkan sebuah container (biasanya
menggunakan FrameLayout) ke dalam activity dimana kita bisa
menempelkan sebuah fragment.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/your_placeholder" lalu kita dapat menggunakan FragmentManager
android:layout_width="match_parent" untuk membuat sebuah FragmentTransaction yang
android:layout_height="match_parent"> mengijinkan kita menambah fragment ke FrameLayout di
</FrameLayout> samping:
// Memulai transaksi
</LinearLayout> FragmentTransaction ft =
getSupportFragmentManager().beginTransaction();
// mengganti isi container dengan fragment baru
ft.replace(R.id.your_placeholder, new FooFragment());
// atau ft.add(R.id.your_placeholder, new FooFragment());
// mulai melakukan hal di atas (jika belum di commit maka
proses di atas belum dimulai)
ft.commit();
Catatan
• Jika sebuah fragment harus selalu ada di dalam activity, gunakan XML
untuk meanmpilkannya secara statis namun saat menemukan kasus
yang lebih kompleks pastikan untuk menggunakan pendekatan
menggunakan Java.
Fragment Lifecycle