Untuk membuat sebuah fragment, kita harus membuat sebuah subclass dari Fragment
(atau subclass yang ada). Class Fragment
memiliki kode yang banyak kesamaannya dengan sebuah Activity
. Dalam kode tersebut terkandung metode callback serupa dengan activity, misalnya onCreate()
, onStart()
, onPause()
, dan onStop()
. Faktanya, jika kita ingin mengkonversi aplikasi android untuk menggunakan fragment, mungkin kita cukup memindahkan kode dari metode callback activity ke dalam metode callback dari masing-masing fragment.
Biasanya, kita harus mengimplementasikan paling tidak metode siklus hidup berikut:
onCreate()
- Sistem memanggil metode ini pada saat membuat fragment. Dalam implementasinya, kita sebaiknya menginisialisasikan komponen penting dari fragment yang ingin kita jaga ketika fragment tersebut di pause, atau distop, kemudian di resume.
onCreateView()
- Sistem memanggil metode ini ketika tiba saatnya bagi fragment untuk menggambar UI-nya untuk pertama kali. untuk menggambar sebuah UI fragment, kita harus me-return sebuah
view
dari metode ini yang menjadi "root" layout milik fragment. kita bisa return null jika fragment tidak menyediakan sebuah UI. onPause()
- Sistem menamggil metode ini sebagai indikasi pertama bahwa user meninggalkan fragment (meskipun tidak selalu berarti bahwa fragment dihapus). Di sinilah biasanya dimana kita harus menyimpan perubahan yang ingin dijaga setelah sesi user yang sekarang (karena user mungkin tidak kembali).
Sebagian besar aplikasi menerapkan minimal tiga metode tersebut untuk setiap fragment, tapi ada beberapa metode callback lain yang sebaiknya kita gunakan untuk meng-handle tahapan-tahapan yang bervariasi dari siklus hidup fragment.
Selain metode, juga terdapat beberapa subclass yang mungkin bisa kita turunkan, selain class dasar Fragment
.
DialogFragment
- Menampilkan sebuah dialog mengapung. Menggunakan class ini untuk membuat sebuah dialog merupakan pilihan yang bagus untuk menggunakan metode bantuan dialog dalam class
Activity
, karena kita bisa menggabungkan sebuah fragment dialog ke dalam backstack fragment yang di-manage oleh activity, sehingga user bisa kembali ke fragment yang sudah ditinggalkan. ListFragment
- Menampilkan sebuah daftar item yang di-manage oleh adapter (misalnya sebuah
SimpleCursorAdapter
), serupa denganListActivity
. Class ini menyediakan beberapa metode untuk me-manage sebuah tampilan daftar, misalnya callbackonListItemClick()
untuk meng-handle event klik. PreferenceFragment
- Menampilkan hierarki sebuah obyek
Preference
dalam bentuk daftar, serupa denganPreferenceActivity
. Class ini sangat bermanfaat ketika membuat sebuah activity "setting" untuk aplikasi kita.
Gambar direferensi dari halaman: http://developer.android.com/guide/topics/fundamentals/fragments.html
Menambahkan user interface pada fragment
Sebuah fragment biasanya digunakan sebagai bagian dari UI activity dan memberikan layputnya ke activity. Untuk membuat layout sebuah fragment, kita harus menerapkan metode callback onCreateView()
, yang mana dipanggil sistem Android ketika tiba saatnya fragment menggambar layoutnya. Implementasi metode ini harus me-return sebuah View
yang menjadi root dari layout fragment.
Note: Jika fragment kita adalah sebuah subclass dariListFragment
, implementasi default me-return sebuahListView
darionCreateView()
, jadi kita tidak perlu mengimplementasikannya
Untuk me-return sebuah layout dari onCreateView()
, kita bisa mengembangkannya dari sumberdaya layout yang didefinisikan di XML. Untuk membantu kita, onCreateView()
menyediakan sebuah obyek LayoutInflater
obyek.
Sebagai contoh, berikut ini adalah sebuah subclass dari Fragment
yang me-load sebuah layout dari file contoh_fragment.xml
:
public static class ContohFragment extends Fragment {
@Override
public View onCreateView()(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Mengembangkan layout untuk fragment ini
return inflater.inflate(R.layout.contoh_fragment, container, false);
}
}
Parameter container
yang dioperkan ke onCreateView()
adalah ViewGroup
"parent" yang merupakan tempat layout fragment dimasukan. Parameter
savedInstanceState
merupakan sebuah Bundle
yang menyediakan data mengenai state fragment sebelumnya, jika fragment di-resume.
Metode inflate()
mengambil tiga parameter (argument):
- ID sumberdaya dari layout yang ingin kita inflate.
ViewGroup
yang akan menjadi dari layout yang di-inflate. Mengoperkancontainer
sangat penting agar sistem bisa menerapkan parameter layout ke tampilan root dari layout yang di-inflate, diterangkan oleh tampilan parent yang sedang berjalan.- Sebuah boolean yang mengindikasikan apakah layout yang di-inflate harus menempel ke
ViewGroup
(parameter kedua) selama proses inflate. Dalam kasus ini, nilainya adalah false karena sistem sudah memasukan layout yang di-inflate kecontainer
, mengoperkan true akan menyebabkan sebuah redudansi group tampilan di layout akhir.
Menambahkan fragment ke activity
Biasanya, sebuah fragment menyumbang sebuah UI ke activity, yang mana tertanam sebagai bagian dari keseluruhan hierarki tampilan activity. Ada dua cara untuk menambahkan fragment ke layout activity:
- Deklarasi fragment di dalam file layout activity.
Dalam hal ini, kita bisa menspesifikasikan properti layout sebagai sebuah tampilan biasa. Seperti contoh, berikut ini adalah file layout untuk activity dengandua fragment
Atribut<?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" > <fragment android:name="org.pupil.learnfragment.news.AcrticleListFragment" android:id="@+id/list" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" /> <fragment android:name="org.pupil.learnfragment.news.ArticleReaderFragment" android:id="@+id/viewer" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> </LinearLayout>
Android:name
dalam<fragment>
menspesifikasikan classFragment
agar melakukan instansiasi layoutKetika sistem membuat layout activity ini, sistem menginstansiasi setiap fragment yang dispesifikasikan dalam layout dan memanggil metode
onCreateView()
untuk masing-masing fragment, agar mendapatkan masing-masing layout fragment. Sistem memasukanView
yang di-return oleh fragment secara langsung menggantikan elemen<fragment>
.Catatan: Setiap fragment membutuhkan sebuah identifier yang unik yang bisa digunakan sistem untuk me-restore fragment jika activity di jalankan kembali. Selain itu juga bisa kita gunakan untuk meng-capture fragment untuk melakukan transaksi, misalnya menghapus fragment. Ada tiga cara untuk menyediakan ID bagi sebuah fragment:
- Memberikan atribut
android:id
dengan ID yang unik. - Memberikan atribut
android:tag
dengan string yang unik - Jika kita memberikan keduanya, sistem menggunakan ID sebagai penampung tampilan.
- Memberikan atribut
- Atau, menambahkan fragment ke
ViewGroup
yang sudah ada menggunakan program - Kapanpun ketika activity berjalan, kita bisa menambahkan fragment ke layout activity . Kita cukup menspesifikasikan sebuah
ViewGroup
yang akan menjadi tempat fragment. Untuk membuat transaksi fragment di dalam activity (misalnya menambah, menghapus atau mengganti fragment), kita harus menggunakan API dariFragmentTransaction
. Kita bisa mendapatkan instansiFragmentTransaction
dariActivity
sebagai berikut:
kemudian kita bisa menambahkan sebuah fragment menggunakan metodeFragmentManager managerFragment = getFragmentManager(); FragmentTransaction transaksiFragment = managerFragment.beginTransaction();
add()
, memberikan spesifikasi fragment yang ingin ditambahkan dan tampilan fragment. Sebagai contoh:
Argument pertama yang dioperkan keContohFragment fragment = new ContohFragment(); transaksiFragment.add(R.id.fragment_container, fragment); transaksiFragment.commit()
add()
adalahViewGroup
dimana fragment ditempatkan, dispesifikasikan oleh ID sumberdaya, dan parameter kedua adalah fragment yang akan ditambahkan. Setelah kita membuat perubahan denganFragmentTransaction
, kita harus memanggilcommit()
agar dapat dirasakan efek perubahannya.
Menambahkan fragment tanpa User Interface
Contoh di atas menunjukan cara untuk menambahkan sebuah fragment ke activity dengan UI. Namun, kita juga bisa menggunakan fragment untuk menyediakan sebuah perilaku background pada activity tanpa memiliki tambahan UI.
untuk menambahkan sebuah fragment tanpa UI, tambahkan fragment tersebut menggunakan add(Fragment, String)
(memberikan sebuah string sebagai "label" untuk fragment, bukannya sebuah ID tampilan). Dengan begini, fragment tetap ditambahkan, tapi karena tidak berhubungan dengan sebuah tampilan di layout activity, metode ini tidak akan memanggil onCreateView()
. Jadi kita tidak perlu menerapkan metode ini.
Memberikan sebuah label pada fragment, tidak semata-mata hanya untuk fragment non-UI, kita juga bisa memberikan label ke fragment yang memiliki UI, tapi jika fragment tidak memiliki UI, maka hanya label satu-satunya cara untuk mengidentifikasikan fragment. Jika nantinya kita ingin menggunakan fragment pada activity, kita perlu menggunakan findFragmentBytag()
.
Tweet
Apaaaa inii? Saya nggak ngerti blas.
BalasHapusSudah saya duga, bukan sembarangan :D Saya senang melihat kemajuan akang. Wiiiih, Android dan Ubuntu, ya? Terima kasih, Kang.
Kalau saya, masih nggak maju-maju. Tenang aja, Kang.
Ente yang suka rendah hati, bro. Kemampuan saya masih jauh dari yang saya harapkan.
BalasHapusbagus kang,, lanjutkan
BalasHapus