Anda bisa menganggap fragmen sebagai bagian modular dari aktivitas, yang memiliki siklus prosesnya sendiri, menerima peristiwa input sendiri, dan yang bisa Anda tambahkan atau hapus saat aktivitas berjalan (semacam "subaktivitas" yang bisa digunakan kembali di berbagai aktivitas). Pelajaran ini menunjukkan cara memperluas class Fragment
menggunakan Support Library sehingga aplikasi Anda tetap kompatibel dengan perangkat yang menjalankan versi sistem mulai dari Android 1.6.
Alih-alih menyiapkan komponen dependen dalam metode siklus proses Fragmen, sebaiknya buat komponen yang memperhatikan siklus proses. Komponen ini dapat menangani setiap penyiapan atau penghilangan yang diperlukan saat Fragmen Anda berpindah antarsiklus prosesnya. Komponen yang memperhatikan siklus proses nantinya dapat digunakan kembali pada Fragmen dan Aktivitas lainnya guna menghindari duplikasi kode, serta mengurangi jumlah penyiapan yang perlu Anda lakukan pada Fragmen/Aktivitas itu sendiri. Untuk informasi selengkapnya, baca Menangani Siklus Proses dengan Komponen yang Memperhatikan Siklus Proses.
Sebelum memulai pelajaran ini, Anda harus menyiapkan project Android untuk menggunakan Support Library.
Jika belum pernah menggunakan Support Library, siapkan project Anda untuk menggunakan library v4 dengan mengikuti dokumen Penyiapan Support Library. Namun, Anda juga dapat mencantumkan panel aplikasi dalam aktivitas Anda menggunakan library v7 appcompat, yang kompatibel dengan Android 2.1 (API level 7) dan juga mencantumkan Fragment
API.
Untuk informasi selengkapnya tentang menerapkan fragmen, lihat Fragmen. Anda juga dapat mempelajari lebih lanjut dengan mencari aplikasi contoh yang relevan.
Membuat Class Fragmen
Untuk membuat fragmen, perluas class Fragment
, lalu ganti metode siklus proses utama untuk memasukkan logika aplikasi Anda, mirip dengan cara yang Anda lakukan pada class Activity
.
Satu perbedaan saat membuat Fragment
adalah Anda harus menggunakan callback onCreateView()
untuk menentukan tata letak.
Bahkan, ini adalah satu-satunya callback yang Anda butuhkan agar fragmen berjalan. Misalnya, berikut adalah fragmen sederhana yang menentukan tata letaknya sendiri:
Kotlin
import android.os.Bundle import android.support.v4.app.Fragment import android.view.LayoutInflater import android.view.ViewGroup class ArticleFragment : Fragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View { // Inflate the layout for this fragment return inflater.inflate(R.layout.article_view, container, false) } }
Java
import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.ViewGroup; public class ArticleFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.article_view, container, false); } }
Sama seperti aktivitas, fragmen harus menerapkan callback siklus proses lainnya yang memungkinkan Anda mengelola statusnya saat ditambahkan atau dihapus dari aktivitas dan sebagai transisi aktivitas antarstatus siklus prosesnya. Misalnya, jika metode onPause()
aktivitas dipanggil, setiap fragmen dalam aktivitas juga akan menerima panggilan ke onPause()
.
Informasi selengkapnya tentang siklus proses fragmen dan metode callback tersedia pada panduan developer Fragmen.
Menambahkan Fragmen ke Aktivitas menggunakan XML
Meskipun fragmen dapat digunakan kembali, komponen UI modular, setiap instance class Fragment
harus dikaitkan dengan FragmentActivity
induk. Asosiasi ini bisa Anda capai dengan menentukan setiap fragmen dalam file XML tata letak aktivitas.
Catatan: FragmentActivity
adalah aktivitas khusus yang disediakan di Support Library untuk menangani fragmen pada versi sistem sebelum API level 11. Jika versi sistem terendah yang Anda dukung adalah API level 11 atau lebih tinggi, maka Anda dapat menggunakan Activity
.
Berikut adalah contoh file tata letak yang menambahkan dua fragmen ke aktivitas ketika layar perangkat dianggap "besar" (ditentukan oleh qualifier large
pada nama direktori).
res/layout-large/news_articles.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <fragment android:name="com.example.android.fragments.HeadlinesFragment" android:id="@+id/headlines_fragment" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" /> <fragment android:name="com.example.android.fragments.ArticleFragment" android:id="@+id/article_fragment" android:layout_weight="2" android:layout_width="0dp" android:layout_height="match_parent" /> </LinearLayout>
Tips: Guna mengetahui informasi selengkapnya cara membuat tata letak untuk berbagai ukuran layar, baca Mendukung Berbagai Ukuran Layar.
Kemudian terapkan tata letak ke aktivitas Anda:
Kotlin
import android.os.Bundle import android.support.v4.app.FragmentActivity class MainActivity : FragmentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.news_articles) } }
Java
import android.os.Bundle; import android.support.v4.app.FragmentActivity; public class MainActivity extends FragmentActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.news_articles); } }
Jika menggunakan library appcompat v7, sebaiknya aktivitas Anda memperluas AppCompatActivity
, yang merupakan subclass dari FragmentActivity
. Untuk informasi selengkapnya, baca Menambahkan Panel Aplikasi).
Catatan: Jika menambahkan fragmen ke tata letak aktivitas dengan menentukan fragmen dalam file XML layout, Anda tidak bisa menghapus fragmen tersebut saat waktu proses. Jika berencana untuk berganti fragmen masuk dan keluar selama interaksi pengguna, Anda harus menambahkan fragmen ke aktivitas saat aktivitas pertama kali dimulai, seperti yang ditunjukkan pada Membuat UI yang fleksibel.