Membuat Fragment

Kita bisa melihat suatu 'fragment' sebagai bagian modular dari suatu 'activity', yang memiliki siklus hidupnya sendiri, menerima 'event' inputnya sendiri, dan yang bisa kita tambahkan atau hilangkan sembari 'activity' sedang berjalan (semacam 'sub-activity' yang bisa kita gunakan kembali dalam berbagai 'activity' yang berbeda). Latihan ini akan menunjukkan bagaimana menggunakan class 'Fragment' dengan menggunakan 'Support Library' sehingga app kita tetap kompatibel dengan perangkat-perangkat yang berjalan pada berbagai versi sistem mulai Android 1.6.

Sebelum kita mulai latihan ini, kita harus men-set project Android kita untuk menggunakan 'Support Library'. Bila kita belum menggunakan 'Support Library' sebelumya, kita harus men-set project kita untuk menggunakan library v4 dengan mengikuti dokumen 'Support Library Setup'. Tetapi, kita juga bisa memasukkan 'app bar' di dalam 'activity-activity' kita sebagai ganti menggunakan 'v7 appcompat library', yang kompatibel dengan Android 2.1 (API level 7) dan juga termasuk API-API 'Fragment'.

Membuat Classs 'Fragment'

Untuk membuat fragment, terapkan class 'Fragment' (menggunakan 'extend'), kemudian 'override' method-method siklus hidup utama untuk memasukkan lojik app kita, mirip dengan yang kita terapkan pada class 'Activity'.

Satu perbedaannya ketika membuat suatu 'Fragment' adalah bahwa kita harus menggunakan method 'onCreateView()' untuk membuat layout. Pada kenyataannnya, ini adalah satu-satunya method yang kita perlukan untuk menjalankan suatu 'fragment'. Contohnya, berikut di bawah ini adalah 'fragment' sederhana untuk menetapkan layout-nya sendiri:
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);
    }
}

Persis seperti 'activity', suatu 'fragment' seharusnya mengimplementasikan method-method siklus hidup lainnya sehingga kita bisa menangani status-nya ketika 'fragment' ditambahkan atau dihilangkan dari 'activity' dan ketika 'activity' bertransisi dari status-status siklus hidupnya. Contohnya, ketika method 'onPause()' dari activity dipanggil, 'fragment-fragment' yang ada di dalam 'activity' juga menerima panggilan 'onPause()' ini.

Hal-hal lebih detil tentang siklus hidup 'fragment' dan method-methodnya ada di 'Fragments' developer guide.


Menambahkan 'Fragment' ke 'Activity' dengan menggunakan XML

Selagi 'fragment-'fragment' merupakan komponen-komponen UI modular yang bisa digunakan kembali, masing-masing instan dari class 'Fragment' harus dikaitkan/diasosiasikan dengan induknya yaitu 'FragmentActivity'. Kita bisa membuat asosiasi ini dengan membuat masing-masing 'fragment' di dalam file XML layout 'activity' kita.
Catatan:
'FragmentActivity' adalah 'activity' khusus yang disediakan di dalam 'Support Library' untuk menangani 'fragment'fragment' pada versi-versi sistem yang lebih lama dari API level 11. Bila versi sistem terendah yang kita support adalah API level 11 atau yang lebih tinggi, maka kita bisa menggunakan 'Activity' yang biasa/regular.
Berikut di bawah ini adalah contoh file layout yang menambahkan dua 'fragment' ke suatu 'activity' ketika layar perangkat masuk kategori "large" (yang ditentukan oleh qualifier 'large' di dalam nama directory).

"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>
Tip:
Untuk lebih detil tentang membuat layout untuk ukuran layar yang berbeda-beda, silahkan baca 'Mendukung Ukuran Layar Yang Berbeda-beda'.

Kemudian berikutnya terapkan layout ke 'activity' kita:
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);
    }
}
Bila kita menggunakan v7 appcompat library, 'activity' kita seharusnya menerapkan 'extend AppCompatActivity', yang merupakan subclass dari 'FragmentActivity'. Untuk lebih detil silahkan baca 'Adding the App Bar'.
Catatan:
Ketika kita menambahkan 'fragment' ke 'layout activity' dengan membuat fragment di file XML layout, kita tidak bisa menghilangkan 'fragment' tersebut saat runtime. Bila kita merencanakan untuk men-swap fragment-fragment kita masuk dan keluar selama interaksi dengan user, kita harus menambahkan 'fragment' ke 'activity' saat pertama kali mulai seperti akan ditunjukkan dalam latihan berikutnya.
lisensi: cc by