Membuat fragmen

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). Tutorial 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 tutorial 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.

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 reguler.

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.