Membuat fragmen

Anda bisa menganggap fragmen sebagai bagian modular dari aktivitas, yang memiliki lifecycle sendiri, menerima kejadian masukan sendiri, dan yang bisa Anda tambahkan atau hapus saat aktivitas berjalan (semacam "subaktivitas" yang bisa digunakan kembali dalam aktivitas berbeda). Pelajaran ini menunjukkan cara memperluas kelas Fragment menggunakan Library Dukungan sehingga aplikasi Anda tetap kompatibel dengan perangkat yang menjalankan versi sistem serendah Android 1.6.

Alih-alih menyiapkan komponen dependen Anda dalam metode lifecycle Fragmen Anda, Anda sebaiknya membuat komponen yang mempertimbangkan lifecycle-aware. Komponen dapat menangani setiap penyiapan atau pembongkaran yang diperlukan saat Fragmen Anda bergerak melalui lifecycle-nya. Komponen lifecycle-aware selanjutnya dapat digunakan kembali di Fragmen dan Aktivitas lain untuk menghindari duplikasi kode, dan mengurangi jumlah penyiapan yang perlu Anda lakukan di Fragmen/Kegiatan itu sendiri. Untuk informasi lebih lanjut, baca Menangani Lifecycle dengan Komponen Lifecycle-Aware.

Sebelum memulai pelajaran ini, Anda harus menyiapkan project Android Anda untuk menggunakan Library Dukungan. Jika Anda belum pernah menggunakan Library Dukungan sebelumnya, siapkan project Anda untuk menggunakan library v4 dengan mengikuti dokumen Penyiapan Library Dukungan. Namun, Anda juga dapat menyertakan bilah aplikasi dalam aktivitas Anda menggunakan library v7 appcompat, yang kompatibel dengan Android 2.1 (API level 7) dan juga mencakup Fragment API.

Untuk informasi lebih lanjut tentang cara menerapkan fragmen, lihatFragmen. Anda juga dapat mempelajari lebih lanjut dengan menggali lebih dalam aplikasi contoh yang relevan.

Membuat Kelas Fragmen

Untuk membuat fragmen, perluas kelas Fragment, lalu ganti metode lifecycle kunci untuk menyisipkan logika aplikasi Anda, mirip dengan cara yang Anda lakukan dengan kelas Activity.

Satu perbedaan saat membuat Fragment adalah Anda harus menggunakan callback onCreateView() untuk menentukan layout. Bahkan, ini adalah satu-satunya callback yang Anda butuhkan untuk menjalankan fragmen. Misalnya, berikut adalah fragmen sederhana yang menentukan layoutnya 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 lifecycle lainnya yang memungkinkan Anda untuk mengelola keadaannya saat ditambahkan atau dihapus dari aktivitas dan sebagai transisi aktivitas antar status lifecycle-nya. Misalnya, ketika metode aktivitas onPause() dipanggil, setiap fragmen dalam aktivitas tersebut juga menerima panggilan ke onPause().

Informasi lebih lanjut tentang metode lifecycle dan callback fragmen tersedia di panduan developer Fragmen.

Menambahkan Fragmen ke Activity menggunakan XML

Meskipun fragmen dapat digunakan kembali, tetapi komponen UI modular, setiap instance kelas Fragment harus diasosiasikan dengan induk FragmentActivity. Anda dapat mencapai asosiasi ini dengan mendefinisikan setiap fragmen di dalam file XML layout aktivitas Anda.

Catatan: FragmentActivity adalah aktivitas khusus yang disediakan di Library Dukungan untuk menangani fragmen pada versi sistem yang lebih lama dari 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 layout yang menambahkan dua fragmen ke aktivitas ketika layar perangkat dianggap "besar" (ditentukan oleh kualifikasi large dalam 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: Untuk penjelasan lebih lanjut tentang cara membuat layout untuk ukuran layar yang berbeda, baca Mendukung Beragam Ukuran Layar.

Selanjutnya, terapkan layout 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 Anda menggunakan library appcompat v7, aktivitas Anda harus memperluas AppCompatActivity, yang merupakan subkelas dari FragmentActivity. Untuk informasi lebih lanjut, baca Menambahkan Bilah Aplikasi).

Catatan: Saat Anda menambahkan fragmen ke layout aktivitas dengan mendefinisikan fragmen dalam file XML layout, Anda tidak dapat menghapus fragmen tersebut saat runtime. Jika Anda berencana untuk menukar fragmen Anda selama interaksi pengguna, Anda harus menambahkan fragmen ke aktivitas saat aktivitas pertama kali dimulai, seperti yang ditunjukkan pada Membangun UI fleksibel.