Anda di halaman 1dari 108

MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA

PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Modul 2 Fundamental Pemrograman Android Bagian 1

1. Latihan Activity

Tujuan

Codelab ini bertujuan untuk mengimplementasikan komponen activity pada aplikasi


pertama yang Anda bangun. Harapannya aktifitas ini dapat memberi gambaran yang
jelas tentang cara kerja activity.

Logika Dasar

Melakukan input ke dalam obyek TextBox → melakukan validasi input → melakukan


perhitungan volume balok ketika tombol hitung diklik

Codelab Perhitungan Volume


1. Buat proyek baru dengan klik File → New → New Project pada Android Studio Anda.

Erlangga, S.Kom., M.T. 1


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

2. Setelah muncul jendela Create New Project, atur nama aplikasi dan domain perusahaan /
website Anda. Sebaiknya jangan sama dengan apa yang ada dicontoh. Dan jangan lupa pula
untuk menentukan lokasi proyek.

Erlangga, S.Kom., M.T. 2


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

3. Kemudian pilih tipe peranti (device) untuk aplikasi beserta target minimum SDK yang akan
digunakan. Pilihan target Android SDK akan mempengaruhi banyaknya peranti yang dapat
menggunakan aplikasi. Di sini kita memilih tipe peranti Phone and Tablet dan nilai
minimum SDK kita pasang ke Level 15 (Ice Cream Sandwich). Klik Next untuk melanjutkan.

Erlangga, S.Kom., M.T. 3


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

4. Pada bagian ini kita akan memilih tipe activity awal dari template yang telah disediakan.
Saat ini Android Studio sudah menyediakan berbagai macam template activity dari yang
paling sederhana hingga yang paling kompleks seperti :
Add No Activity : Tidak ada activity yang ditambahkan
Basic Activity : Activity dengan template komponen material design seperti
FloatingActionButton
Empty Activity : Activity dalam bentuk yang paling dasar
Fullscreen Activity : Activity fullscreen tanpa status bar
Google AdMob Ads Activity : Activity dengan konfigurasi default iklan Admob
Google Maps Activity : Activity dengan menyediakan konfigurasi dasar Google Maps
Login Activity : Activity untuk halaman login
Master / Detail Flow : Activity yang diperuntukan untuk alur aplikasi master detail pada
peranti tablet

Erlangga, S.Kom., M.T. 4


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Navigation Drawer Activity : Activity dengan tampilan side bar menu


Scrolling Activity : Activity dengan kemampuan scroll konten didalamnya secara vertikal
Settings Activity : Activity yang diperuntukan untuk konfigurasi aplikasi
Tabbed Activity : Activity yang diperuntukan untuk menampilkan lebih dari satu tampilan,
dapat digeser ke kanan dan ke kiri (swipe) dan dengan menggunakan komponen viewpager

Saat ini kita pilih tipe empty activity, klik Next untuk melanjutkan.
5. Selanjutnya, tentukan nama activity pertama kita, saat ini kita biarkan pada kondisi apa
adanya. Ingat, jika suatu saat nanti kita ingin melakukan penambahan activity , maka
sebaiknya nama untuk activity tersebut disamakan dengan nama kelasnya dan diakhiri

Erlangga, S.Kom., M.T. 5


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

dengan activity . Misal: ProfileActivity, SettingsActivity dan lain sebagainya. Klik


Finish untuk menyelesaikan.

6. Selamat! Anda telah berhasil membuat sebuah proyek baru Android. Biasanya, tampilan
layar Anda akan seperti contoh di bawah ini :

Erlangga, S.Kom., M.T. 6


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

7. Di sebelah kanan anda adalah workspace dimana Activity anda berada dan bernama
MainActivity.java dengan layoutnya activity_main.xml. Di sebelah kiri Anda terdapat
struktur proyek, di mana nanti kita akan banyak menambahkan berbagai komponen baru,
asset dan library. Untuk lebih mengenal Android Studio lebih dalam silakan baca materi ini
https://developer.android.com/studio/intro/index.html

Erlangga, S.Kom., M.T. 7


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Selanjutnya kita akan mulai melakukan pengkodean aplikasi atau lebih enaknya disebut ngoding.

Berikut flow umumnya.

1. Ngoding Layout untuk user interface aplikasi


2. Ngoding Activity untuk menambahkan logika aplikasi

Untuk mengoptimalkan proses pengetikan, Anda dapat memanfaatkan code completion dengan
menekan ctrl + space. Android Studio juga akan meng-import package dari komponen yang
digunakan.

Dilarang Keras untuk copy - paste! Ngoding pelan-pelan akan membuat Anda lebih jago di
masa depan.

Selamat ngoding!

Menambahkan Code Sederhana pada Layout Activity

1. Silakan klik tab file activity_main.xml pada workspace Anda(res/Layout/activity_main.xml),


dan tambahkan baris-baris berikut:

1. <?xml version="1.0" encoding="utf-8"?>


2. <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
3. xmlns:tools="http://schemas.android.com/tools"
4. android:layout_width="match_parent"
5. android:layout_height="match_parent"
6. android:paddingBottom="@dimen/activity_vertical_margin"
7. android:paddingLeft="@dimen/activity_horizontal_margin"
8. android:paddingRight="@dimen/activity_horizontal_margin"
9. android:paddingTop="@dimen/activity_vertical_margin"
10. android:orientation="vertical"
11. tools:context="com.dicoding.picodiploma.barvolume.MainActivity">
12.
Erlangga, S.Kom., M.T. 8
Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

13. <TextView
14. android:layout_width="match_parent"
15. android:layout_height="wrap_content"
16. android:text="Panjang" />
17.
18. <EditText
19. android:id="@+id/edt_length"
20. android:layout_width="match_parent"
21. android:layout_height="wrap_content"
22. android:inputType="numberDecimal"
23. android:lines="1" />
24.
25. <TextView
26. android:layout_width="match_parent"
27. android:layout_height="wrap_content"
28. android:text="Lebar" />
29.
30. <EditText
31. android:id="@+id/edt_width"
32. android:layout_width="match_parent"
33. android:layout_height="wrap_content"
34. android:inputType="numberDecimal"
35. android:lines="1" />
36.
37. <TextView
38. android:layout_width="match_parent"
39. android:layout_height="wrap_content"
40. android:text="Tinggi" />
41.
42. <EditText
43. android:id="@+id/edt_height"
44. android:layout_width="match_parent"
45. android:layout_height="wrap_content"
46. android:inputType="numberDecimal"
47. android:lines="1" />
48.
49. <Button
50. android:id="@+id/btn_calculate"
51. android:layout_width="match_parent"
52. android:layout_height="wrap_content"
53. android:text="Hitung" />
54.
55. <TextView
56. android:id="@+id/tv_result"
57. android:layout_width="match_parent"
58. android:layout_height="wrap_content"
59. android:gravity="center"
60. android:text="Hasil"
61. android:textSize="24sp"
62. android:textStyle="bold" />

Erlangga, S.Kom., M.T. 9


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

63. </LinearLayout>

2. Akan muncul warning pada atribut android:text pada layout tersebut. Ini karena kita
melakukan hardcoding pada nilai string-nya. Mari kita hilangkan code warning tersebut
dengan menekan Alt+Enter pada attribut android:text. Akan muncul dialog seperti ini,
pilihlah extract string resource.

3. Kemudian akan muncul dialog seperti di bawah ini. Sesuaikan dengan nama yang ada.

Erlangga, S.Kom., M.T. 10


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

4. Fungsi extract string resource akan secara otomatis menambahkan nilai dari android:text ke dalam
berkas res → values → strings.xml. Lakukan hal yang sama pada view lainnya hingga tidak ada
warning lagi. Jika kita buka berkas strings.xml, maka isinya akan menjadi seperti ini:

1. <resources>
2. <string name="app_name">BarVolume</string>
3. <string name="width">Lebar</string>
4. <string name="height">Tinggi</string>
5. <string name="calculate">Hitung</string>
6. <string name="result">Hasil</string>
7. <string name="length">Panjang</string>
8. </resources>

Jika terjadi kesalahan pada atribut dimens, maka kita perlu menambahkan berkas dimens.xml di
dalam res → values → dimens.xml. Kesalahan ini disebabkan karena pada Android Studio 2.3, berkas
dimens.xml sudah tidak dibuat secara otomatis. Langsung saja tambahkan dengan cara Klik Kanan
pada directory res. Akan muncul dialog seperti ini.

Erlangga, S.Kom., M.T. 11


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

6. Kemudian isi sesuai di bawah ini.

Erlangga, S.Kom., M.T. 12


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

7. Jika berkas dimens.xml sudah dibuat, sesuaikan isinya menjadi seperti berikut.

1. <?xml version="1.0" encoding="utf-8"?>


2. <resources>
3. <dimen name="activity_horizontal_margin">16dp</dimen>
4. <dimen name="activity_vertical_margin">8dp</dimen>
5. </resources>

Menambahkan Code Sederhana pada Main Activity

1. Selanjutnya setelah selesai, lanjutkan dengan membuka berkas MainActivity.java dan


lanjutkan ngoding baris-baris dibawah ini.

Tambahkan beberapa variabel yang akan digunakan untuk menampung View.

1. EditText edtWidth, edtHeight, edtLength;


2. Button btnCalculate;
3. TextView tvResult;

Erlangga, S.Kom., M.T. 13


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

public class MainActivity extends AppCompatActivity implements


View.OnClickListener {
private EditText edtWidth, edtHeight, edtLength;
private Button btnCalculate;
private TextView tvResult;

Erlangga, S.Kom., M.T. 14


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edtWidth = (EditText)findViewById(R.id.edt_width);
edtHeight = (EditText)findViewById(R.id.edt_height);
edtLength = (EditText)findViewById(R.id.edt_length);
btnCalculate = (Button)findViewById(R.id.btn_calculate);
tvResult = (TextView)findViewById(R.id.tv_result);
btnCalculate.setOnClickListener(this);

@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_calculate){
String length = edtLength.getText().toString().trim();
String width = edtWidth.getText().toString().trim();
String height = edtHeight.getText().toString().trim();
boolean isEmptyFields = false;
if (TextUtils.isEmpty(length)){
isEmptyFields = true;
edtLength.setError("Field ini tidak boleh kosong");
}
if (TextUtils.isEmpty(width)){
isEmptyFields = true;
edtWidth.setError("Field ini tidak boleh kosong");
}
if (TextUtils.isEmpty(height)){
isEmptyFields = true;
edtHeight.setError("Field ini tidak boleh kosong");
}
if (!isEmptyFields) {
double l = Double.parseDouble(length);
double w = Double.parseDouble(width);
double h = Double.parseDouble(height);
double volume = l * w * h;
tvResult.setText(String.valueOf(volume));
}
}
}

Erlangga, S.Kom., M.T. 15


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Jika terdapat baris merah seperti ini :

Jangan khawatir! Silakan klik di atas baris merah tersebut dan klik pada ikon bola lampu. Atau
dengan tekan tombol Alt + Enter lalu pilih implements method.

2. Setelah selesai, silakan jalankan aplikasi dengan memilih menu Run → Run ‘app’ dari menu bar.
Kemudian ada pilihan seperti ini.

Erlangga, S.Kom., M.T. 16


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Itu tandanya adb (Android Debugger) pada peranti yang Anda punya telah terhubung dengan
Android Studio. Jika Anda tidak memiliki peranti, maka Anda dapat menggunakan emulator. Ikuti
materinya disini https://developer.android.com/studio/run/managing-avds.html.

Kami merekomendasikan Anda menggunakan peranti Android sewaktu mengembangkan aplikasi.


Selain karena beban memori pada peranti Anda akan jadi lebih rendah, pendekatan ini juga akan
memungkinkan Anda untuk merasakan bagaimana aplikasi berjalan di device sebenarnya.
Pilih OK untuk menjalankan dan tunggu hingga proses building dan instalasi APK selesai. Jika sudah,
seharusnya hasilnya akan seperti ini. Silakan masukan nilai panjang, lebar dan tinggi kemudian

Erlangga, S.Kom., M.T. 17


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

tekan tombol Hasil dan hasilnya akan ditampilkan di obyek textview tvHasil.

3. Apakah kita sudah selesai? Belum! Masih ada yang kurang. Ketika nilai luas sudah dihitung
dan kemudian terjadi pergantian orientasi pada peranti, maka hasil perhitungan tadi akan
hilang. Tambahkan beberapa baris berikut pada MainActivity.java.

Erlangga, S.Kom., M.T. 18


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

private static final String STATE_HASIL = "state_hasil";

@Override
protected void onSaveInstanceState(Bundle outState) {

outState.putString(STATE_HASIL, tvResult.getText().toString());
super.onSaveInstanceState(outState);
}

Kemudian tambahkan juga beberapa baris berikut pada baris terakhir metode onCreate.

if (savedInstanceState != null){
String hasil = savedInstanceState.getString(STATE_HASIL);
tvResult.setText(hasil);
}

Silakan jalankan kembali aplikasinya. Ulangi proses perhitungan seperti sebelumnya.


Kemudian ganti orientasi peranti Anda. Jika sudah benar maka hasil perhitungan tidak akan
hilang.

Bedah Code
Pembahasan tentang layout xml

1. xml version="1.0" encoding="utf-8"?>

Baris ini mengidentifikasi bahwa berkas ini berformat xml.

Erlangga, S.Kom., M.T. 19


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

1. xmlns:android="http://schemas.android.com/apk/res/android"
2. xmlns:tools="http://schemas.android.com/tools"

Kode di atas menandakan namespace yang digunakan dalam keseluruhan berkas xml ini.

Disini kita menggunakan beberapa komponen user interface yang disebut view. Diantaranya:

TextView : Komponen view untuk menampilkan teks ke layar

EditText : Komponen view untuk memberikan input teks

Button : Komponen view untuk melakukan sebuah aksi klik

LinearLayout : Komponen view bertipe viewgroup yang menjadi parent dari semua sub komponen
view (sub view) di dalamnya. Komponen ini bersifat sebagai kontainer untuk komponen lain dengan
orientasi secara vertikal atau horizontal.

Cara membaca :

1. <TextView
2. android:layout_width="match_parent"
3. android:layout_height="wrap_content"
4. android:text="Panjang"
5. android:layout_marginBottom="@dimen/activity_vertical_margin"/>

Komponen diatas adalah sebuah TextView. Perhatikan gambar di bawah ini, warna ungu menandakan
namespace yang digunakan; warna biru adalah atribut dari komponen dan warna hijau adalah nilai dari
atribut. Penjelasannya seperti dibawah ini:

Erlangga, S.Kom., M.T. 20


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

match_parent: Ini berarti bahwa ukuran dimensi sebuah View disesuaikan dengan ukuran layar secara
horizontal jika pada layout_width dan vertikal jika pada layout_height.

wrap_content : Ini berarti bahwa ukuran dimensi sebuah View disesuaikan dengan ukuran konten
didalamnya baik secara horizontal pada layout_width dan vertikal jika pada layout_height.

@dimen/activity_vertical_margin: Value activity_vertical_margin berasal dari berkas dimens.xml


yang bisa Anda lihat dengan cara menekan dan tahan tombol Ctrl (atau command) + arahkan kursor
keatasnya dan kemudian klik sekali. Penggunaan centralize resource value akan memudahkan Anda
sewaktu mengembangkan aplikasi Android. Cara tersebut digunakan agar Anda tidak menulis nilai yang
sama berulang-ulang.

Erlangga, S.Kom., M.T. 21


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Apa itu ‘@+id/’ ?

Salah satu contoh penerapan penggunaan @+id/ sebagai berikut:

1. <Button
2. android:id="@+id/btn_calculate"
3. android:layout_width="match_parent"
4. android:layout_height="wrap_content"
5. android:text="Hitung"
6. android:layout_marginBottom="@dimen/activity_vertical_margin"/>

Penjelasannya sebagai berikut:

1. android:id="@+id/btn_calculate"

Jika kita memberikan id pada sebuah view maka kita telah memberikan identifier untuk view tersebut.
Pemberian id ini dimaksudkan agar kita bisa melakukan manipulasi/pengendalian pada level logic di
komponen seperti activity atau fragment.

Id di atas akan diciptakan di berkas R.java dan disimpan dalam bentuk hexa bertipe data integer public
static final int btn_calculate=0x7f0b0057.

Erlangga, S.Kom., M.T. 22


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Acuan untuk menyusun tampilan pada relativelayout akan dibahas pada modul selanjutnya.

Erlangga, S.Kom., M.T. 23


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Pembahasan tentang Logika Kode

1. public class MainActivity extends AppCompatActivity

Menandakan bahwa kelas Java di atas merupakan sebuah activity karena inherit ke superclass bernama

AppCompatActivity.

1. implements View.OnClickListener

Ini adalah listener yang kita implementasikan untuk memantau kejadian klik pada komponen tombol
(button).

Jika terdapat baris merah seperti ini :

Jangan khawatir. Silakan klik di atas baris merah tersebut dan klik pada ikon bola lampu. Anda juga
dapat menekan tombol (Alt + Enter) lalu pilih implements method.

1. private EditText edtWidth, edtHeight, edtLength;


2. private Button btnCalculate;
3. private TextView tvResult;

Erlangga, S.Kom., M.T. 24


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Kode di atas mendeklarasikan semua komponen view yang akan dimanipulasi. Kita deklarasikan secara
global agar bisa dikenal di keseluruhan bagian kelas.

1. @Override
2. protected void onCreate(Bundle savedInstanceState) {
3. super.onCreate(savedInstanceState);
4. setContentView(R.layout.activity_main);
5. edtWidth = (EditText)findViewById(R.id.edt_width);
6. edtHeight = (EditText)findViewById(R.id.edt_height);
7. edtLength = (EditText)findViewById(R.id.edt_length);
8. btnCalculate = (Button)findViewById(R.id.btn_calculate);
9. tvResult = (TextView)findViewById(R.id.tv_result);
10. btnCalculate.setOnClickListener(this);
11. }

Metode onCreate() merupakan metode utama pada activity. Di sinilah kita dapat mengatur layout xml.
Semua proses inisialisasi komponen yang digunakan akan dijlankan disini.. Pada metode ini kita casting
semua komponen view yang kita telah deklarasikan sebelumnya, agar dapat kita manipulasi.

1. setContentView(R.layout.activity_main);

Maksud baris diatas adalah kelas MainActivity akan menampilkan tampilan yang berasal dari layout
activity_main.xml.

1. edtWidth = (EditText)findViewById(R.id.edt_width);

Maksud dari baris diatas adalah obyek edittext edtWidth disesuaikan (cast) dengan komponen

edittext ber-ID edt_width di layout xml melalui metode findViewById().

1. btnCalculate.setOnClickListener(this);

Kita memasang event click listener untuk obyek btnCalculate sehingga sebuah aksi dapat dijalankan
ketika obyek tersebut diklik. Keyword this merujuk pada obyek Activity saat ini yang telah
mengimplementasikan listener OnClickListener sebelumnya.

Erlangga, S.Kom., M.T. 25


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Pembahasan saveInstanceState

1. @Override
2. protected void onSaveInstanceState(Bundle outState) {
3.
4. outState.putString(STATE_HASIL, tvResult.getText().toString());
5. super.onSaveInstanceState(outState);
6. }

Perhatikan metode onSaveInstanceState. Di dalam metode tersebut, hasil perhitungan yang ditampilkan
pada tvResult dimasukkan pada bundle kemudian disimpan isinya. Setelah onSaveInstanceState berhasil
dijalankan, maka activity akan melakukan proses onDestroy dan menjalankan kembali onCreate secara
otomatis.

1. if (savedInstanceState != null){
2. String hasil = savedInstanceState.getString(STATE_HASIL);
3. tvResult.setText(hasil);
4. }

Pada onCreate inilah kita menggunakan nilai bundle yang telah kita simpan sebelumnya pada
onSaveInstanceState. Nilai tersebut kita isikan kembali pada tvResult.

Erlangga, S.Kom., M.T. 26


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

2. Latihan Intent

Tujuan

Codelab ini menitik beratkan pada implementasi intent untuk melakukan perpindahan dari

activity ke activity lain, dengan atau tidak membawa data. Beberapa bagian dari codelab ini akan
menjawab beberapa pertanyaan umum dalam pengembangan aplikasi Android sebagai berikut:

 Bagaimana berpindah dari satu activity ke activity lain?


 Bagaimana berpindah dari satu activity ke activity lain dengan membawa data?
 Single value dari suatu variabel.
 Obyek model Plain Old Java Object (POJO).
 Menjalankan komponen di aplikasi lain untuk keperluan membuka browser atau
melakukan pemanggilan melalui aplikasi telepon bawaan?
 Mengirimkan hasil nilai balik melalui Intent

Logika Dasar

Berpindah dari satu Activity ke Activity lain dengan membawa data. Activity asal
akan mengirimkan data melalui Intent dan Activity tujuan akan menerima data yang
dikirimkan.

Codelab Intent Sederhana

1. Buat Project baru di Android Studio dengan kriteria sebagai berikut:

 Nama Project : MyIntentApp

Erlangga, S.Kom., M.T. 27


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

 Target & Minimum Target SDK : Phone and Tablet, Api level 15
 Tipe Activity : Empty Activity
 Activity Name : MainActivity

2. Selanjutnya kita akan membangun antarmuka (interface) seperti ini:

3. Kita akan memiliki 5 tombol dengan fungsi yang berbeda-beda dan 1 buah TextView untuk
menampilkan data yang berasal dari intent. Baik, kita akan mulai selangkah demi selangkah
dimulai dari tombol yang paling atas. Kondisikan activity_main.xml menjadi seperti ini:

Erlangga, S.Kom., M.T. 28


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

<?xml version="1.0" encoding="utf-8"?>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.studio.erlangga.myintentapp.MainActivity">

<Button
android:id="@+id/btn_move_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Pindah Activity"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
</LinearLayout>

Jangan lupa untuk menambahkan file dimens.xml secara manual di dalam res →
values. Dan isikan file dimens.xml seperti berikut

<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
</resources>

Lalu untuk MainActivity.java tambahkan beberapa baris seperti ini.

Erlangga, S.Kom., M.T. 29


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

public class MainActivity extends AppCompatActivity implements


View.OnClickListener {

private Button btnMoveActivity;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnMoveActivity = (Button) findViewById(R.id.btn_move_activity);
btnMoveActivity.setOnClickListener(this);

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_move_activity:
break;
}
}
}

5. Button btnMoveActivity akan memiliki fungsi untuk berpindah activity ke activity lain. Sekarang kita
buat Activity baru dengan cara sebagai berikut: Klik kanan di package utama aplikasi package
name → New → Activity → Empty Activity.

Erlangga, S.Kom., M.T. 30


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Lalu isikan MoveActivity pada dialog. Ketika sudah klik Finish.

Erlangga, S.Kom., M.T. 31


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

6. Untuk menandakan bahwa perpindahan activity berhasil, silakan tambahkan satu TextView
dan kondisikan activity_move.xml menjadi seperti berikut.

<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.studio.erlangga.myintentapp.MoveActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Ini MoveActivity"/>
</RelativeLayout>

7. Setelah activity tujuan sudah berhasil diciptakan, sekarang saatnya menambahkan suatu
intent pada method onClick() di MainActivity.java menjadi sebagai berikut.

Erlangga, S.Kom., M.T. 32


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

public class MainActivity extends AppCompatActivity implements


View.OnClickListener {

private Button btnMoveActivity;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnMoveActivity = (Button) findViewById(R.id.btn_move_activity);
btnMoveActivity.setOnClickListener(this);

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_move_activity:
Intent moveIntent = new Intent(MainActivity.this,
MoveActivity.class);
startActivity(moveIntent);

break;
}
}
}

Selesai! Langkah pertama untuk memindahkan satu activity ke activity lain sudah selesai, sekarang
silakan jalankan aplikasi Anda dengan mengklik tombol pada menu bar. Seharusnya sekarang anda
sudah bisa memindahkan activity dengan mengklik tombol ‘Pindah Activity’.

Erlangga, S.Kom., M.T. 33


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Erlangga, S.Kom., M.T. 34


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Bedah Code Intent Sederhana

Kita telah belajar bagaimana membuat suatu activity baru. Di materi sebelumnya, syarat suatu

activity haruslah terdaftar pada berkas AndroidManifest.xml. Karena menggunakan Android Studio,
proses pendaftaran tersebut dilakukan secara otomatis.

1. <?xml version="1.0" encoding="utf-8"?>


2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3. package="com.dicoding.associate.myintentapp">
4. <application
5. android:allowBackup="true"
6. android:icon="@mipmap/ic_launcher"
7. android:label="@string/app_name"
8. android:supportsRtl="true"
9. android:theme="@style/AppTheme">
10. <activity android:name=".MainActivity">
11. <intent-filter>
12. <action android:name="android.intent.action.MAIN" />
13. <category
android:name="android.intent.category.LAUNCHER" />
14. </intent-filter>
15. </activity>
16. <activity android:name=".MoveActivity"></activity>
17. </application>
18. </manifest>

Perhatikan bahwa MoveActivity sudah teregistrasi di AndroidManifest.xml dan sekarang sudah aman
jika kita melakukan perpindahan activity dari MainActivity ke MoveActivity.

Umumnya, jika kita lupa meregistrasikan Activity baru ke dalam berkas AndroidManifest.xml akan
terjadi error seperti ini "android.content.ActivityNotFoundException:Unable to find explicit activity
class".

Berikutnya, apakah Anda memahami maksud dari baris ini?

Erlangga, S.Kom., M.T. 35


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

1. <intent-filter>
2. <action android:name="android.intent.action.MAIN" />
3. <category android:name="android.intent.category.LAUNCHER" />
4. </intent-filter>

Intent-filter merupakan mekanisme untuk menentukan bagaimana suatu activity dijalankan oleh
Android Runtime (ART) atau Dalvik Virtual Machine (DVM).

1. <action android:name="android.intent.action.MAIN" />

Baris di atas bermakna bahwa MainActivity memiliki intent action utama dari keseluruhan activity yang
ada di suatu Aplikasi.

1. <category android:name="android.intent.category.LAUNCHER" />

Kode di atas menandakan bahwa MainActivity akan dikategorikan sebagai activity launcher. Activity
tersebut akan diluncurkan pertama kali ketika pengguna menekan ikon aplikasi pada peranti Android.

Selanjutnya,

1. Intent moveIntent = new Intent(MainActivity.this, MoveActivity.class);

Kita membuat suatu obyek Intent dengan cara seperti di atas dengan memberikan kelas Activity asal
(MainActivity.this) dan kelas Activity tujuan (MoveActivity.class) pada konstruktor kelas Intent.

Kelas asal selalu menggunakan .this yang menandakan obyek kelas saat ini. Kelas tujuan selalu
menggunakan .class.

Jika kita menggunakan code assistant dari Android Studio, maka akan tampil rekomendasi (code hint)
sebagai berikut:

Erlangga, S.Kom., M.T. 36


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Pada konteks diatas kita memilih Context packageContext, Class cls sebagai inputan untuk nilai
constructor intent.

startActivity(moveIntent) : metode ini akan menjalankan activity baru tanpa membawa data. Obyek
intent yang diinputkan adalah obyek moveIntent yang akan menjalankan MoveActivity.

Pada modul ini kita telah berhasil memindahkan satu Activity ke Activity lain dengan tidak membawa
data. Pada bagian selanjutnya kita akan membuat suatu Intent yang di dalamnya akan membawa data
ke Activity tujuan.

Codelab Intent Membawa Data

Selanjutnya kita akan membuat sebuah intent yang didalamnya akan membawa data ke activity
tujuan. Anda Siap?

1. Buka activity_main.xml, kemudian tambahkan satu tombol lagi dibawah tombol


sebelumnya, sehingga kode activity_main.xml kita menjadi seperti ini.

Erlangga, S.Kom., M.T. 37


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

<?xml version="1.0" encoding="utf-8"?>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.studio.erlangga.myintentapp.MainActivity">
<Button
android:id="@+id/btn_move_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Pindah Activity"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
<Button
android:id="@+id/btn_move_activity_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Pindah Activity Dengan Data"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
</LinearLayout>

2. Setelah selesai dengan penambahan pada berkas activity_main.xml, maka lanjutkan


dengan menambahkan beberapa baris berikut di MainActivity.java.

Erlangga, S.Kom., M.T. 38


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

package com.studio.erlangga.myintentapp;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements


View.OnClickListener {

private Button btnMoveActivity;


private Button btnMoveWithDataActivity;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnMoveActivity = (Button) findViewById(R.id.btn_move_activity);
btnMoveActivity.setOnClickListener(this);
btnMoveWithDataActivity =
(Button)findViewById(R.id.btn_move_activity_data);
btnMoveWithDataActivity.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_move_activity:
Intent moveIntent = new Intent(MainActivity.this,
MoveActivity.class);
startActivity(moveIntent);
break;
case R.id.btn_move_activity_data:
break;

}
}
}

3. Selanjutnya, buat Activity baru lagi seperti cara sebelumnya dan beri nama
MoveWithDataActivity. Lalu, pada layout activity_move_with_data.xml kita tambahkan
sebuah TextView ber-ID untuk menampilkan data yang dikirimkan dari Activity asal.

Erlangga, S.Kom., M.T. 39


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.studio.erlangga.myintentapp.MoveWithDataActivity">
<TextView
android:id="@+id/tv_data_received"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Data Received"/>
</RelativeLayout>

4. Selanjutnya pada MoveWithDataActivity.java kita kondisikan menjadi seperti berikut:

public class MoveWithDataActivity extends AppCompatActivity {

public static String EXTRA_AGE = "extra_age";


public static String EXTRA_NAME = "extra_name";
private TextView tvDataReceived;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_move_with_data);
tvDataReceived = (TextView)findViewById(R.id.tv_data_received);
String name = getIntent().getStringExtra(EXTRA_NAME);
int age = getIntent().getIntExtra(EXTRA_AGE, 0);
String text = "Name : "+name+", Your Age : "+age;
tvDataReceived.setText(text);
}
}

5. Dan sekarang saatnya kita menambahkan obyek Intent pada MainActivity.java seperti baris
dibawah ini.

Erlangga, S.Kom., M.T. 40


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_move_activity:
Intent moveIntent = new Intent(MainActivity.this,
MoveActivity.class);
startActivity(moveIntent);
break;
case R.id.btn_move_activity_data:
Intent moveWithDataIntent = new Intent(MainActivity.this,
MoveWithDataActivity.class);
moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_NAME,
"Halo It's My Name Erlangga Boy");
moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_AGE, 5);
startActivity(moveWithDataIntent);
break;
}
}

6. Silakan jalankan aplikasi Anda, kemudian coba klik pada tombol ‘Pindah Activity dengan
Data’. Seharusnya Anda sudah bisa memindahkan satu activity ke activity lain dengan
membawa data.

Erlangga, S.Kom., M.T. 41


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Bedah Code Intent Membawa Data

Pada bagian sebelumnya Anda sudah mempelajari bagaimana memindahkan satu activity ke
activityactivity lain dengan membawa data. Dan itu sangat penting karena ketika kita
Erlangga, S.Kom., M.T. 42
Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

mengembangkan suatu aplikasi Android yang kompleks. Akan ada banyak sekali activity yang
terlibat. Lancarnya perpindahan activity dengan data menjadi hal yang penting untuk
memberikan pengalaman yang baik kepada pengguna.

1. Intent moveWithDataIntent = new Intent(MainActivity.this,


MoveWithDataActivity.class);
2. moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_NAME,
"DicodingAcademy Boy");
3. moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_AGE, 5);
4. startActivity(moveWithDataIntent);

Perbedaan mendasar antara memindahkan activity dengan membawa data dan tidak adalah
dengan menempatkan data yang akan dikirim ke activity tujuan pada baris ini.

1. moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_NAME,
"DicodingAcademy Boy");
2. moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_AGE, 5);

Kita memanfaatkan metode putExtra() untuk mengirimkan data bersamaan dengan obyek
Intent. Sedangkan metode putExtra() itu sendiri merupakan metode yang menampung
pasangan key-value dan memiliki beberapa pilihan tipe input seperti berikut :

Hampir semua tipe data untuk input value didukung oleh metode putExtra().

1. moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_NAME,"DicodingAc
ademy Boy");

Erlangga, S.Kom., M.T. 43


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Name : MoveWithDataActivity.EXTRA_NAME dimana EXTRA_NAME adalah variabel static


bertipe data string dan bernilai “extra_name” pada MoveWithDataActivity.java. Penentuan nilai
untuk key parameter untuk intent adalah bebas, di sini kami merekomendasikan format terbaik
yang biasa diimplementasikan.

Value : Halo It’s My Name Erlangga Boy.

Di sini kita akan mengirimkan data bertipe string ke MoveWithDataActivity. Di dalam


MoveWithdataActivity kita akan mengambil nilai data berdasarkan key yang dikirimkan dengan
menggunakan metode getIntent().getStringExtra(key). Implementasinya sebagai berikut:

1. String name = getIntent().getStringExtra(EXTRA_NAME);

Catatan : Key yang dikirimkan melalui putExtra() harus sama dengan key sewaktu mengambil
nilai dari data yang dikirimkan melalui getStringExtra().

Dalam konteks di atas, key yang digunakan untuk mengirim dan mengambil nilai data adalah
sama, yaitu EXTRA_NAME (yang bernilai “extra_name”). Nilai dari data yang dikirimkan melalui
intent disimpan ke dalam variabel name bertipe data string.

Begitu juga dengan,

1. int age = getIntent().getIntExtra(EXTRA_AGE, 0);

Nilai dari variabel age yang bertipe data integer berasal dari getIntent().getIntExtra(Key, nilai
default). Key yang digunakan untuk mengirimkan dan mengambil data adalah EXTRA_AGE (yang
bernilai “extra_age”).

Selamat! Anda telah mempelajari dua intent explicit dengan atau tidak membawa data.

Erlangga, S.Kom., M.T. 44


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Sebelumnya, mengirimkan data bernilai tunggal dari satu activity ke activity lain adalah hal yang
mudah. Bernilai tunggal karena data yang dikirimkan berasal dari satu tipe data.

Misalnya pada contoh di atas, pengiriman nilai data name dan age dilakukan secara sendiri-
sendiri. Yang satu bertipe data string dan yang lainnya bertipe data integer.

Sekarang pertanyaanya bagaimana Anda bisa mengirimkan data dalam bentuk Plain Old Java
Object (POJO) dari satu activity ke activity lain melalui intent? Caranya adalah dengan
mengubah obyek POJO yang Anda miliki ke dalam bentuk obyek parcelable. Di Android Studio
sudah ada fasilitas plugin bernama Android Parcelable Generator untuk memudahkan proses
tersebut.

Codelab Intent Dengan Plain Old Java Object (POJO)

Selanjutnya, kita akan membuat sbeuah intent yang di dalamnya akan membawa data dengan
Plain Old Java Object (POJO) ke activity tujuan.

Bagi yang belum mengenal apa itu Plain Old Java Object (POJO), berikut penjelasan singkatnya.
POJO adalah sebuah kelas Java biasa yang tidak bergantung dengan kelas lain. Umumnya kelas
POJO ini disebut sebagai kelas Java yang memiliki properti/variabel dan metode setter-getter.
Seperti dibawah ini.

1. public class MyBean {


2.
3. private String someProperty;
4.
5. public String getSomeProperty() {
6. return someProperty;
7. }
8.
9. public void setSomeProperty(String someProperty) {
10. this.someProperty = someProperty;
11. }
12. }

Erlangga, S.Kom., M.T. 45


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Lalu apa kegunaan obyek POJO? POJO akan membantu kita saat aplikasi semakin kompleks.
Contohnya POJO bisa kita gunakan untuk melakukan koneksi ke server untuk request API atau
akses ke database lokal dengan SQLite.

Selain POJO, Android juga memiliki obyek parcelable POJO. Obyek ini akan lebih memudahkan
kita untuk melakukan pengiriman data dari satu activity ke activity lainnya.

1. Sebelum membuat obyek parcelable, kita buat kelas Java POJO terlebih dahulu. Caranya,
klik kanan pada package utama proyek → New → Java Class

2. Pada dialog, isikan nama kelas dengan ‘Person’. Lalu klik OK.

3. Setelah selesai terbentuk kelas Person, kondisikan kelas tersebut menjadi seperti ini.

Erlangga, S.Kom., M.T. 46


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

public class Person {


private String name;
private int age;
private String email;
private String city;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}

Anda tidak perlu menulis satu per satu metode setter-getter nya, di Android Studio
tersedia fasilitas generator untuk hal tersebut. Caranya, setelah Anda menentukan
variabel apa saja yang akan digunakan lakukan, lakukan beberapa langkah sebagai
berikut :

Erlangga, S.Kom., M.T. 47


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Klik kanan pada workspace, pilih Generate.

4. Pilih Getter and Setter.

5. Pilih semua variabel dengan cara Ctrl+A pada windows dan Command+A pada mac. Bila
sudah, maka klik OK. Secara otomatis metode setter dan getter masing-masing variabel
akan dibuatkan

Selanjutnya kita akan menambahkan plugin Android Parcelable Generator pada Android Studio.
Plugin ini berguna untuk mengubah kelas POJO menjadi obyek Parcelable. Langkah-langkahnya
sebagai berikut :

Erlangga, S.Kom., M.T. 48


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

1. Buka settings dengan cara File → Settings pada Windows dan Android Studio →
Preferences pada Mac.
2. Pilih menu Plugin. Dan inputkan "Android Parcelable" pada search box kemudian tekan
Enter.

Erlangga, S.Kom., M.T. 49


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

3. Klik browse, dengan ini kita memerintahkan Android Studio untuk melakukan pencarian
plugin di server. Setelah ketemu Android Parcelable code generator, klik Install.

Erlangga, S.Kom., M.T. 50


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

4. Biarkan Android Studio melakukan proses instalasi plugin. Bila sukses, maka Anda akan
diminta untuk melakukan restart Android Studio yang sedang berjalan.

Klik Restart → Klik OK dan jika ada pilihan untuk restart Android Studio maka pilih restart.
Biarkan Android Studio untuk restart agar plugin-nya dapat kita gunakan setelahnya.
Catatan : Jika dialog search tidak berhasil mencari plugin, kosongkan kata pencarian dan
masukkan kembali kata pencarian "Android Parcelable". Ini bisa terjadi karena ada
error di dalam dialog Plugins.

5. Selanjutnya, setelah plugin Parcelable generator terinstal saatnya kita implementasikan


pada kelas Person. Dengan cara :

Erlangga, S.Kom., M.T. 51


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Klik kanan pada workspace (pastikan anda berada pada tab kelas Person) pilih menu
Generate.

6. Pilih Parcelable.

Erlangga, S.Kom., M.T. 52


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

7. Pada dialog box yang tampil, pilih semua variable yang ada lalu klik OK.

Sekarang Anda bisa menemukan beragam metode parcelable untuk kelas Person. Sekarang
kelas Person sudah sah menjadi kelas parcelable dan dapat dikirimkan ke activity lain
melalui intent.

8. Sekarang waktunya kita implementasikan pada intent. Namun sebelumnya tambahkan satu
tombol lagi pada activity_main.xml sebagai berikut:
Erlangga, S.Kom., M.T. 53
Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

<?xml version="1.0" encoding="utf-8"?>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.studio.erlangga.myintentapp.MainActivity">
<Button
android:id="@+id/btn_move_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Pindah Activity"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
<Button
android:id="@+id/btn_move_activity_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Pindah Activity Dengan Data"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
<Button
android:id="@+id/btn_move_activity_object"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Pindah Activity dengan Object"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
</LinearLayout>

9. Setelah selesai dengan layout xml, sekarang kita tambahkan (pada bagian yang ditebalkan)
juga di kelas MainActivity.java sehingga menjadi sebagai berikut :

Erlangga, S.Kom., M.T. 54


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

package com.studio.erlangga.myintentapp;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements


View.OnClickListener {

private Button btnMoveActivity;


private Button btnMoveWithDataActivity;
private Button btnMoveWithObject;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnMoveActivity = (Button) findViewById(R.id.btn_move_activity);
btnMoveActivity.setOnClickListener(this);
btnMoveWithDataActivity =
(Button)findViewById(R.id.btn_move_activity_data);
btnMoveWithDataActivity.setOnClickListener(this);
btnMoveWithObject =
(Button)findViewById(R.id.btn_move_activity_object);
btnMoveWithObject.setOnClickListener(this);

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_move_activity:
Intent moveIntent = new Intent(MainActivity.this,
MoveActivity.class);
startActivity(moveIntent);
break;
case R.id.btn_move_activity_data:
Intent moveWithDataIntent = new Intent(MainActivity.this,
MoveWithDataActivity.class);

moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_NAME, "Halo It's My


Name Erlangga Boy");
moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_AGE,
5);
startActivity(moveWithDataIntent);
break;
case R.id.btn_move_activity_object:
break;

}
Erlangga,}S.Kom., M.T. 55
}
Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

10. Buat Activity baru dengan nama MoveWithObjectActivity lalu pada


activity_move_with_object.xml tambahkan satu buah TextView untuk menampilkan data
yang dikirimkan.

<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.studio.erlangga.myintentapp.MoveWithObjectActivity">
<TextView
android:id="@+id/tv_object_received"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Object Received"/>
</RelativeLayout>

11. Sekarang, pada MoveWithObjectActivity.java tambahkan kodenya sehingga menjadi


sebagai berikut:

Erlangga, S.Kom., M.T. 56


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

public class MoveWithDataActivity extends AppCompatActivity {

public static String EXTRA_AGE = "extra_age";


public static String EXTRA_NAME = "extra_name";
private TextView tvDataReceived;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_move_with_data);
tvDataReceived = (TextView)findViewById(R.id.tv_data_received);
String name = getIntent().getStringExtra(EXTRA_NAME);
int age = getIntent().getIntExtra(EXTRA_AGE, 0);
String text = "Name : "+name+", Your Age : "+age;
tvDataReceived.setText(text);
}
}

12. Setelah kita membuat activity tujuan dengan sempurna, sekarang kita hanya butuh
menambahkan beberapa baris pada bagian switch… case, sehingga kode MainActivity.java
kita menjadi sebagai berikut:

Erlangga, S.Kom., M.T. 57


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

package com.studio.erlangga.myintentapp;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements


View.OnClickListener {

private Button btnMoveActivity;


private Button btnMoveWithDataActivity;
private Button btnMoveWithObject;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnMoveActivity = (Button) findViewById(R.id.btn_move_activity);
btnMoveActivity.setOnClickListener(this);
btnMoveWithDataActivity =
(Button)findViewById(R.id.btn_move_activity_data);
btnMoveWithDataActivity.setOnClickListener(this);
btnMoveWithObject =
(Button)findViewById(R.id.btn_move_activity_object);
btnMoveWithObject.setOnClickListener(this);

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_move_activity:
Intent moveIntent = new Intent(MainActivity.this,
MoveActivity.class);
startActivity(moveIntent);
break;
case R.id.btn_move_activity_data:
Intent moveWithDataIntent = new Intent(MainActivity.this,
MoveWithDataActivity.class);

moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_NAME, "Halo It's My


Name Erlangga Boy");
moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_AGE,
5);
startActivity(moveWithDataIntent);
break;
case R.id.btn_move_activity_object:
Person mPerson = new Person();
mPerson.setName("Erlangga Studio");
mPerson.setAge(5);
Erlangga, S.Kom., M.T. mPerson.setEmail("admin@erlanggasutdio.com"); 58
mPerson.setCity("Bandung");
Departemen PendidikanIntent
Ilmu Komputer
moveWithObjectIntent = new Intent(MainActivity.this,
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MoveWithObjectActivity.class);

moveWithObjectIntent.putExtra(MoveWithObjectActivity.EXTRA_PERSON,
mPerson);
startActivity(moveWithObjectIntent);
break;
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Setelah semua komponen selesai dibuat, saatnya menjalankan kembali aplikasinya.


Cobalah menakan tombol 'Pindah Activity dengan Object'. Sekarang Anda sudah berhasil
memindahkan satu obyek secara utuh, Selamat!

Bedah Code Intent Dengan Plain Old Java Object (POJO)

Akhirnya, Anda sudah berhasil menerapkan 3 tipe perpindahan Activity secara eksplisit melalui
Intent. Sekarang, mari kita dalami penjelasannya satu per satu.

1. Person mPerson = new Person();


2. mPerson.setName("DicodingAcademy");
3. mPerson.setAge(5);
4. mPerson.setEmail("academy@dicoding.com");
5. mPerson.setCity("Bandung");

Di atas kita menciptakan sebuah obyek Person bernama mPerson yang mana kelas tersebut
adalah Parcelable. Kita atur semua data sesuai dengan propertinya. Setelah selesai kita akan
mengirimkan obyek tersebut ke MoveWithObjectActivity melalui sebuah intent dibawah ini.

1. Intent moveWithObjectIntent = new Intent(MainActivity.this,


MoveWithObjectActivity.class);
2. moveWithObjectIntent.putExtra(MoveWithObjectActivity.EXTRA_PERSON,
mPerson);
3. startActivity(moveWithObjectIntent);
4. moveWithObjectIntent.putExtra(MoveWithObjectActivity.EXTRA_PERSON,
mPerson);

Erlangga, S.Kom., M.T. 59


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Metode putExtra() yang kita pilih saat ini adalah putExtra(String name, Parcelable value).

Dengan EXTRA_PERSON merupakan variabel static bertipe data string dan bernilai
“extra_person”.

Selanjutnya pada MoveWithObjectActivity akan dilakukan pengambilan nilai seperti berikut :

1. Person mPerson = getIntent().getParcelableExtra(EXTRA_PERSON);

1. Dan ini yang seru, karena obyek ini terdiri dari beragam tipe data pada
atribut atau propertinya, kita hanya cukup membungkus itu semua kedalam
obyek parcelable. Melalui getIntent().getParcelableExtra(Key) Anda
dapat mengambil nilai obyek Person yang sebelumnya telah dikirim dan
menampilkannya seperti ini.
2. String text = "Name : "+mPerson.getName()+", Email :
"+mPerson.getEmail()+", Age : "+mPerson.getAge()
3. + ", Location : "+mPerson.getCity();
4. tvObject.setText(text);

Codelab Intent Implicit

Selanjutnya, kita akan membuat sebuah contoh aplikasi dengan menggunakan intent implicit.
Anda sudah belajar bagaimana menggunakan intent dengan tipe eksplisit. Sekarang saatnya
Anda melanjutkan ke intent dengan tipe implicit.

Erlangga, S.Kom., M.T. 60


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

1. Buka kembali activity_main.xml tambahkan satu tombol lagi sehingga file activity_main.xml
menjadi seperti berikut :

<?xml version="1.0" encoding="utf-8"?>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.studio.erlangga.myintentapp.MainActivity">
<Button
android:id="@+id/btn_move_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Pindah Activity"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
<Button
android:id="@+id/btn_move_activity_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Pindah Activity Dengan Data"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
<Button
android:id="@+id/btn_move_activity_object"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Pindah Activity dengan Object"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
<Button
android:id="@+id/btn_dial_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Dial a Number"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
</LinearLayout>

2. Sekarang, buka kembali MainActivity.java dan lanjutkan dengan melakukan casting tombol
Dial Number, set listener dan menambahkan action ketika tombol diklik.

Erlangga, S.Kom., M.T. 61


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

package com.studio.erlangga.myintentapp;

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements


View.OnClickListener {

private Button btnMoveActivity;


private Button btnMoveWithDataActivity;
private Button btnMoveWithObject;
private Button btnDialPhone;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnMoveActivity = (Button) findViewById(R.id.btn_move_activity);
btnMoveActivity.setOnClickListener(this);
btnMoveWithDataActivity =
(Button)findViewById(R.id.btn_move_activity_data);
btnMoveWithDataActivity.setOnClickListener(this);
btnMoveWithObject =
(Button)findViewById(R.id.btn_move_activity_object);
btnMoveWithObject.setOnClickListener(this);
btnDialPhone = (Button)findViewById(R.id.btn_dial_number);
btnDialPhone.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_move_activity:
Intent moveIntent = new Intent(MainActivity.this,
MoveActivity.class);
startActivity(moveIntent);
break;
case R.id.btn_move_activity_data:
Intent moveWithDataIntent = new
Intent(MainActivity.this, MoveWithDataActivity.class);

moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_NAME, "Halo It's


My Name Erlangga Boy");

moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_AGE, 5);
startActivity(moveWithDataIntent);
break;
case R.id.btn_move_activity_object:
Erlangga, S.Kom., M.T. Person mPerson = new Person(); 62
Departemen PendidikanmPerson.setName("Erlangga
Ilmu Komputer
mPerson.setAge(5);
Studio");

Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)


mPerson.setEmail("admin@erlanggasutdio.com");
mPerson.setCity("Bandung");
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Intent moveWithObjectIntent = new Intent(MainActivity.this,


MoveWithObjectActivity.class);

moveWithObjectIntent.putExtra(MoveWithObjectActivity.EXTRA_PERSON,
mPerson);
startActivity(moveWithObjectIntent);
break;
case R.id.btn_dial_number:
String phoneNumber = "081321397362";
Intent dialPhoneIntent = new Intent(Intent.ACTION_DIAL,
Uri.parse("tel:"+phoneNumber));
startActivity(dialPhoneIntent);
break;
}
}
}

Setelah selesai, silakan jalankan lagi aplikasi anda. Yeay, Anda sudah bisa men-dial
sebuah nomor telepon melalui aplikasi bawaan dari peranti anda. Selamat!

Erlangga, S.Kom., M.T. 63


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Bedah Code Intent Implicit

1. String phoneNumber = "081210841382";


2. Intent dialPhoneIntent = new Intent(Intent.ACTION_DIAL,
Uri.parse("tel:"+phoneNumber));
3. startActivity(dialPhoneIntent);

Baru saja kita mengimplementasikan penggunaan intent secara implicit untuk melakukan
proses dial sebuah nomor telepon. Pada bagian new Intent(Intent.ACTION_DIAL,
Uri.parse("tel:"+phoneNumber)); kita menggunakan inputan new Intent(ACTION, Uri); pada
konstruktor sewaktu menciptakan obyek Intent dimana :

Action : Intent.ACTION_DIAL
Erlangga, S.Kom., M.T. 64
Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Uri : Uri.parse("tel:"+phoneNumber)

Variabel ACTION_DIAL menentukan intent filter dari aplikasi-aplikasi yang bisa menangani
action tersebut. Di sini aplikasi yang memiliki kemampuan untuk komunikasi akan muncul pada
opsi pilihan, sebagaimana ditampilkan ke pengguna.

Selain ACTION_DIAL, di Android sudah tersedia berbagai action yang tinggal didefinisikan
sewaktu menciptakan obyek Intent untuk mengakomodir berbagai tujuan.

Silakan cek link berikut untuk detailnya :

 Intent

Buat yang belum tau apa itu Uri, berikut penjelasan singkatnya :

Uri adalah sebuah untaian karakter yang digunakan untuk mengidentifikasi nama, sumber, atau
layanan di internet sesuai dengan RFC 2396. Pada Uri.parse("tel:"+phoneNumber) kita
melakukan parsing Uri dari bentuk teks string menjadi sebuah obyek uri dengan menggunakan
metode static parse(String). Secara struktur, dibagi menjadi :

Dimana “tel” adalah sebuah skema yang disepakati untuk sumber daya telepon dan
phoneNumber adalah variabel string yang bernilai “081210841382”. Skema lain dari Uri seperti
“geo” untuk peta, “http” untuk browser sisanya bisa dilihat di halaman ini :

Erlangga, S.Kom., M.T. 65


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

 Common Intents

Pada prosesnya, pemanggilan intent secara implicit akan berjalan sesuai dengan diagram
dibawah ini.

1. Aplikasi kita menjalankan intent untuk ACTION_DIAL melalui startActivity().


2. Sistem Android akan melakukan seleksi terhadap semua aplikasi yang memiliki kemampuan
untuk menangani action tersebut. Sistem Android akan menentukan aplikasi mana saja
yang bisa memproses action berdasarkan intent filter yang telah ditentukan di berkas
AndroidManifest.xml pada masing-masing aplikasi.
Sistem Android akan menampilkan opsi aplikasi-aplikasi mana saja yang bisa menangani
action tersebut ke pengguna. Pengguna memilih salah satu opsi aplikasi dan kemudian
sistem Android akan me-routing ke activity pada aplikasi yang dipilih yang memiliki intent-
filter untuk aksi ACTION_DIAL.
3. Aplikasi yang dipilih pun muncul di layar dengan nomor telepon yang sudah diatur.

Erlangga, S.Kom., M.T. 66


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Anda sudah mempelajari 3 buah intent secara eksplisit dan 1 buah intent secara implicit.
Selamat!

Codelab Intent Result Activity

Selanjutnya, kita akan membuat sebuah Intent yang didalamnya akan membawa data dengan
ResultActivity.

Pada modul ini, kita akan membedah hubungan activity dan intent dalam menerima nilai balik.
Kadang kala, ketika kita menjalankan sebuah activity dari activity lain, kita mengharapkan ada
nilai hasil balik dari activity yang dijalankan ketika ia ditutup.

Contohnya kita memiliki activity A yang menjalankan activity B untuk melakukan sebuah proses.
Lalu nilai hasil dari proses tersebut dikirimkan kembali ke activity A sebelum activity B ditutup
dengan pemanggilan metode finish(). Itulah yang dinamakan sebuah activitymenerima nilai
hasil balik dari activityyang dia jalankan. Untuk memperjelas, ayo kita lanjutkan lagi proses
ngodingnya.

1. Sekarang untuk menerapkan konsep diatas, buat sebuah activity baru dengan nama
MoveForResultActivity. Setelah itu, pada activity_move_for_result.xml silakan kondisikan
layout kita dengan 1 buah TextView, 1 buah Radio Group, 3 buah Radio Button dan 2
buah Button sebagai berikut :

Erlangga, S.Kom., M.T. 67


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

<?xml version="1.0" encoding="utf-8"?>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"

tools:context="com.studio.erlangga.myintentapp.MoveForResultActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Pilih angka yang kamu suka"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
<RadioGroup
android:id="@+id/rg_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

Erlangga, S.Kom., M.T. 68


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

<RadioButton
android:id="@+id/rb_50"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="50"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
<RadioButton
android:id="@+id/rb_100"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="100"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
<RadioButton
android:id="@+id/rb_150"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="150"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
<RadioButton
android:id="@+id/rb_200"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="200"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
</RadioGroup>
<Button
android:id="@+id/btn_choose"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Pilih"/>
</LinearLayout>

2. Setelah selesai, lanjutkan ke berkas MoveForResultActivity.java dengan menuliskan kode


sebagai berikut :

Erlangga, S.Kom., M.T. 69


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

public class MoveForResultActivity extends AppCompatActivity implements


View.OnClickListener{
private Button btnChoose;
private RadioGroup rgNumber;
public static String EXTRA_SELECTED_VALUE = "extra_selected_value";
public static int RESULT_CODE = 110;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_move_for_result);
btnChoose = (Button)findViewById(R.id.btn_choose);
btnChoose.setOnClickListener(this);
rgNumber = (RadioGroup)findViewById(R.id.rg_number);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_choose){
if (rgNumber.getCheckedRadioButtonId() != 0){
int value = 0;
switch (rgNumber.getCheckedRadioButtonId()){
case R.id.rb_50:
value = 50;
break;
case R.id.rb_100:
value = 100;
break;
case R.id.rb_150:
value = 150;
break;
case R.id.rb_200:
value = 200;
break;
}
Intent resultIntent = new Intent();
resultIntent.putExtra(EXTRA_SELECTED_VALUE, value);
setResult(RESULT_CODE, resultIntent);
finish();
}
}
}
}

Erlangga, S.Kom., M.T. 70


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

3. Pada activity_main.xml tambahkan lagi satu Button dan satu TextView yang akan kita
gunakan untuk menjalankan MoveForResultActivity, Sehingga layout activity_main.xml
yang kita punya menjadi seperti ini :

Erlangga, S.Kom., M.T. 71


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

<?xml version="1.0" encoding="utf-8"?>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.studio.erlangga.myintentapp.MainActivity">
<Button
android:id="@+id/btn_move_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Pindah Activity"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
<Button
android:id="@+id/btn_move_activity_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Pindah Activity Dengan Data"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
<Button
android:id="@+id/btn_move_activity_object"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Pindah Activity dengan Object"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
<Button
android:id="@+id/btn_dial_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Dial a Number"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
<Button
android:id="@+id/btn_move_for_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Pindah Activity untuk Result"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
<TextView
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="24sp"
android:gravity="center"
android:text="Hasil"/>
</LinearLayout>

Erlangga, S.Kom., M.T. 72


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

4. Setelah selesai, kita lanjut garap berkas MainActivity.java. Buka berkasnya dan sesuaikan
kodenya sebagai berikut.

Erlangga, S.Kom., M.T. 73


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

public class MainActivity extends AppCompatActivity implements


View.OnClickListener {

private Button btnMoveActivity;


private Button btnMoveWithDataActivity;
private Button btnMoveWithObject;
private Button btnDialPhone;
private Button btnMoveForResult;
private TextView tvResult;
private int REQUEST_CODE = 100;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnMoveActivity = (Button) findViewById(R.id.btn_move_activity);
btnMoveActivity.setOnClickListener(this);
btnMoveWithDataActivity =
(Button)findViewById(R.id.btn_move_activity_data);
btnMoveWithDataActivity.setOnClickListener(this);
btnMoveWithObject =
(Button)findViewById(R.id.btn_move_activity_object);
btnMoveWithObject.setOnClickListener(this);
btnDialPhone = (Button)findViewById(R.id.btn_dial_number);
btnDialPhone.setOnClickListener(this);
btnMoveForResult = (Button)findViewById(R.id.btn_move_for_result);
btnMoveForResult.setOnClickListener(this);
tvResult = (TextView)findViewById(R.id.tv_result);

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_move_activity:
Intent moveIntent = new Intent(MainActivity.this,
MoveActivity.class);
startActivity(moveIntent);
break;
case R.id.btn_move_activity_data:
Intent moveWithDataIntent = new Intent(MainActivity.this,
MoveWithDataActivity.class);

moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_NAME, "Halo It's My


Name Erlangga Boy");
moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_AGE,
5);
startActivity(moveWithDataIntent);
break;
case R.id.btn_move_activity_object:
Person mPerson = new Person();
Erlangga, S.Kom., M.T. mPerson.setName("Erlangga Studio"); 74
mPerson.setAge(5);
Departemen PendidikanmPerson.setEmail("admin@erlanggasutdio.com");
Ilmu Komputer
mPerson.setCity("Bandung");
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
Intent moveWithObjectIntent = new Intent(MainActivity.this,
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

5. Setelah selesai, pastikan tidak ada bagian kode yang tertinggal. Jalankan kembali
aplikasinya, dan coba Anda pilih tombol ‘Pindah Activity untuk Result’. Pilih angka yang
Anda suka dan lihat hasilnya. Di MainActivity.java sudah ada angka yang tadi Anda pilih di
obyek textiew tvResult.

Bedah Code Intent Result Activity

Perbedaan mendasar antara perpindahan activity untuk menghasilkan nilai balik dengan tidak
adalah pada metode untuk menjalankan obyek intent-nya. Sebelumnya kita menggunakan
startActivity(Intent) untuk berpindah activity. Kali ini kita menggunakan
startActivityForResult(Intent, RequestCode).

1. Intent moveForResultIntent = new Intent(MainActivity.this,


MoveForResultActivity.class);
2. startActivityForResult(moveForResultIntent, REQUEST_CODE);

Pada baris diatas, kita akan menjalankan sebuah activity melalui intent untuk nilai balik ke
activity yang menjalankan di mana nilai REQUEST_CODE adalah 110. Penentuan nilai 110 itu
dibebaskan dan kalau bisa disesuaikan dengan kebutuhan pengembangan aplikasi.

Kemudian, pada MoveForResultActivity kita memilih satu angka yang kita suka, Sebagai contoh
angka 150. Kemudian tekanlah tombol ‘Pilih’. Maka baris kode dibawah ini akan dijalankan.

1. @Override
2. public void onClick(View v) {
3. if (v.getId() == R.id.btn_choose){
4. if (rgNumber.getCheckedRadioButtonId() != 0){

Erlangga, S.Kom., M.T. 75


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

5. int value = 0;
6. switch (rgNumber.getCheckedRadioButtonId()){
7. case R.id.rb_50:
8. value = 50;
9. break;
10. case R.id.rb_100:
11. value = 100;
12. break;
13. case R.id.rb_150:
14. value = 150;
15. break;
16. case R.id.rb_200:
17. value = 200;
18. break;
19. }
20. Intent resultIntent = new Intent();
21. resultIntent.putExtra(EXTRA_SELECTED_VALUE, value);
22. setResult(RESULT_CODE, resultIntent);
23. finish();
24. }
25. }

Di mana akan divalidasi terlebih dahulu apakah ada nilai dari obyek RadioButton yang dipilih.
Bila ada, maka proses selanjutnya menentukan obyek RadioButton mana yang diklik
berdasarkan nilai dari rgNumber.getCheckedRadioButtonId().

Mengapa kita tidak memeriksa langsung ke obyek RadioButton? Karena kita menggunakan
RadioGroup sebagai parent pada obyek-obyek RadioButton. Secara otomatis kita bisa
mendapatkan mana obyek RadioButton yang dipilih dengan
rgNumber.getCheckedRadioButtonId().

1. <RadioGroup
2. android:id="@+id/rg_number"
3. android:layout_width="match_parent"
4. android:layout_height="wrap_content"
5. android:orientation="vertical">
6. <RadioButton
7. android:id="@+id/rb_50"
8. android:layout_width="match_parent"
9. android:layout_height="wrap_content"
10. android:text="50"
11. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
12. <RadioButton

Erlangga, S.Kom., M.T. 76


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

13. android:id="@+id/rb_100"
14. android:layout_width="match_parent"
15. android:layout_height="wrap_content"
16. android:text="100"
17. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
18. <RadioButton
19. android:id="@+id/rb_150"
20. android:layout_width="match_parent"
21. android:layout_height="wrap_content"
22. android:text="150"
23. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
24. <RadioButton
25. android:id="@+id/rb_200"
26. android:layout_width="match_parent"
27. android:layout_height="wrap_content"
28. android:text="200"
29. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
30. </RadioGroup>

Selanjutnya, ketika sudah didapatkan nilainya, maka baris ini akan dieksekusi:

1. Intent resultIntent = new Intent();


2. resultIntent.putExtra(EXTRA_SELECTED_VALUE, value);
3. setResult(RESULT_CODE, resultIntent);
4. finish();

Kita membuat sebuah intent tanpa ada inputan apapun di konstruktornya. Kemudian kita
meletakkan variabel value kedalam metode putExtra(Key, Value) dengan
EXTRA_SELECTED_VALUE bertipekan static string dan bernilai “extra_selected_value”.
Kemudian kita jadikan obyek resultIntent yang telah dibuat sebelumnya menjadi parameter dari
setResult(RESULT_CODE, Intent).

Setelah itu, kita panggil method finish() untuk menutup MoveForResultActivity.

Ketika MoveForResultActivity telah tertutup sempurna, maka metode onActivityResult() pada


MainActivity akan dijalankan.

1. @Override
2. protected void onActivityResult(int requestCode, int resultCode, Intent
data) {

Erlangga, S.Kom., M.T. 77


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

3. super.onActivityResult(requestCode, resultCode, data);


4. if (requestCode == REQUEST_CODE){
5. if (resultCode == MoveForResultActivity.RESULT_CODE){
6. int selectedValue =
data.getIntExtra(MoveForResultActivity.EXTRA_SELECTED_VALUE, 0);
7. tvResult.setText("Hasil : "+selectedValue);
8. }
9. }
10. }

Di sinilah MainActivity akan merespon terhadap nilai balik yang dikirimkan oleh
MoveForResultActivity. Pada baris 4 di atas, dilakukan perbandingan apakah requestCode sama
dengan yang dikirimkan oleh MainActivity.

Kemudian pada baris 5, diperiksa apakah nilai resultCode sama dengan resultCode yang dikirim
oleh MoveForResultActivity. Bila iya, maka data RadioButton yang dipilih akan ditampilkan di
textview tvResult.

Pada realita sehari-hari, konsep yang barusan kita pelajari ini akan bersinggungan dengan
aplikasi native lainnya. Misalnya, jika aplikasi kita membutuhkan gambar yang diambil dari
kamera atau gallery photo. Tentu kita mengharapkan nilai balik berupa alamat foto yang dapat
diterima oleh activityyang menjalankan. Begitu juga jika kita membutuhkan data kontak yang
berasal dari aplikasi phonebook bawaan peranti Android.

Untuk lebih dalam lagi silakan pelajari materi pada link berikut:

 Intent Result

Keren! Anda sudah belajar dasar-dasar penggunaan intent secara umum di proyek aplikasi
Android. 4 intent secara eksplisit dan 1 secara implisit dengan satu di antaranya mencakup nilai
balik dari activityyang dijalankan.

Untuk mendalami materi intent, silakan meluncur ke link di bawah ini.

Erlangga, S.Kom., M.T. 78


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

 Intent Filters

3. Latihan Fragment

Tujuan

Agar Anda dapat lebih memahami topik fragment, akan ada beberapa codelab yang akan
Anda lakukan.

1. Membuat tampilan fleksibel dengan fragment.


2. Membuat tampilan yang dapat digeser-geser.
3. Membuat tampilan yang dapat disesuaikan dengan perubahan orientasi device.

Codelab Fragment Sederhana

Buat Project baru di Android Studio dengan kriteria sebagai berikut:

 Project Name : MyFlexibleFragment


 Minimum Level Api : 15
 Default Activity : Empty Activity
 Activity Name : MainActivity

1. Pada activity_main.xml, silakan kondisikan kode pada berkas tersebut menjadi seperti
berikut :

Erlangga, S.Kom., M.T. 79


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

2. Kemudian, kita buat beberapa fragment untuk mengimplementasikan perpindahan


tampilan tanpa perpindahan activity. Pertama kita buat Fragment dengan nama
HomeFragment. Caranya : klik kanan pada package utama pada project aplikasi Anda →
New → Fragment → Fragment (Blank).

3. Setelah tampil dialog untuk fragment, isikan HomeFragment pada kolom Fragment Name
dan uncheck untuk kedua pilihan (Include fragment factory methods dan include interface
callbacks) seperti gambar dibawah ini. Klik Finish untuk melanjutkan penciptaan fragment.

Erlangga, S.Kom., M.T. 80


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

4. Setelah HomeFragment tercipta, pada fragment_home.xml kita sesuaikan tampilannya


dengan menambahkan sebuah obyek TextView dan sebuah obyek Button seperti berikut :

Erlangga, S.Kom., M.T. 81


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Akan terjadi error pada tools:context. Tenang, yang perlu Anda lakukan adalah
menyesuaikannya dengan nama activity dan ditambahkan dengan nama package dari
project Anda.

5. Pada HomeFragment.java lakukan penyesuaian kode sebagai berikut:

6. Selanjutnya, pada MainActivity.java, kita tanamkan HomeFragment kedalam activity tersebut


sehingga bisa tampil ke layar pengguna dengan menambahkan beberapa baris berikut:

Erlangga, S.Kom., M.T. 82


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Untuk mengatasi tanda merah pada class, jangan lupa untuk tekan (Alt + Enter) untuk import kel

7. Sekarang, setelah selesai semua, silakan jalankan aplikasi Anda dan hasilnya haruslah seperti ini.

Ketika aplikasi dijalankan, aplikasi akan menampilkan satu text dan satu button yang
dimana kedua komponen tersebut dimiliki oleh HomeFragment.

Bedah Code Fragment Sederhana

Erlangga, S.Kom., M.T. 83


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

FrameLayout memiliki sifat sebagai berikut: semua komponen view di dalam FrameLayout
bersifat menumpuk. Bila pada suatu hirarki FrameLayout terdapat satu view dengan posisi
paling atas, maka view tersebut akan menjadi alas untuk view di atasnya. Gambarannya sebagai
berikut:

Dengan karakteristik seperti ini, FrameLayout merupakan sebuah layout yang paling optimal dalam
proses manipulasi penampilan obyek fragment ke layar pengguna.

Pada HomeFragment.java terdapat metode onCreateView() dimana layout interface didefinisikan dan
ditransformasi dari layout berupa file xml kedalam obyek view dengan menggunakan metode inflate().

Erlangga, S.Kom., M.T. 84


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Inflater.inflate() merupakan obyek dari LayoutInflater yang berfungsi untuk mengubah layout
xml ke dalam bentuk obyek viewgroup atau widget melalui pemanggilan metode inflate().

Isian dari tiga parameter yang terdapat pada metode inflate() berdasarkan dari :

Dimana kita memilih pilihan yang ketiga :

@LayoutRes int resource : Layout yang ingin diubah

@Nullable ViewGroup root : Root dari Layout Activity

Boolean attachToRoot : Apakah kita akan menempelkan layout kita ke dalam root dari parent
layout yang ada. Jika ya, maka akan ditempelkan kedalam parent layout yang ada. Jika tidak, maka hanya
akan menghasilkan nilai balik dalam bentu obyek view saja.

Erlangga, S.Kom., M.T. 85


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Kita memilih false pada attachToRoot karena pada kode ini kita ingin menambahkan event onclick pada
button-nya. Maka kita membutuhkan nilai balik berupa view.

Bacaan berikut akan memberi wawasan yang lebih dalam tentang proses inflate sebuah layout:

 Inflate Layout

Secara default, attachToRoot bernilai false. Jadi kita hanya inginkan mengubah layout xml kedalam
bentuk obyek view.

Sedikit berbeda pada proses casting view dari sebuah ID di dalam layout xml, disini casting obyek Button
dilakukan dengan (Button)view.findViewById(R.id.btn_category). Kode tersebut menandakan
btn_category berada pada obyek view dimana obyek view berasal dari konversi fragment_home.xml.
Bila hanya (Button)findViewById(R.id.btn_category), maka btn_category berada pada root layout,
activity_main.xml.

Sekarang pada MainActivity.java kita lakukan proses penempelan atau pemasangan obyek
HomeFragment sehingga dapat ditampilkan ke layar dengan mekanisme sebagai berikut :

Dimana,

Erlangga, S.Kom., M.T. 86


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Kita menggunakan instance dari FragmentManager yang merupakan antarmuka untuk


mengorganisir obyek fragment yang terdapat didalam sebuah Activity. Disini kita menggunakan
kelas FragmentManager yang berasal dari Android Support Library v4, agar bisa kompatibel ke
versi Android sebelumnya (Backward Compability).

Oleh karena itu kita menggunakan getSupportFragmentManager() dan bukan getFragmentManager().

Untuk detail terkait FragmentManager, silakan Anda meluncur ke :

 Fragment Manager

FragmentTransaction merupakan api untuk melakukan operasi pada fragment seperti add(), replace(),

commit() dsb.

Silakan ke halaman ini untuk detailnya :

 Fragment Transaction

Erlangga, S.Kom., M.T. 87


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Disinilah proses manipulasi penambahan fragment kedalam activity terjadi. Metode add() akan
menambahkan obyek fragment kedalam layout container. Layout container ini merupakan obyek
FrameLayout dengan ID frame_container. Ia memiliki tag dengan nama kelas dari HomeFragment itu
sendiri.

Baris diatas akan meminta obyek mFragmentTransaction untuk melakukan pemasangan obyek secara
asynchronous untuk ditampilkan ke antar muka pengguna (user interface).

Codelab Flexible Fragment di Satu Activity

Selanjutnya, kita akan membuat sebuah fragment lagi untuk melihat bagaimana sebuah
tampilan bisa dengan fleksibel berubah di dalam satu activity, tanpa berpindah halaman. Buat
kembali fragment baru dengan nama CategoryFragment dengan cara yang sama seperti
sebelumnya. Jangan lupa untuk meng-uncheck pilihan untuk generate default methods dan
callbacks.

1. Pada fragment_category.xml silakan kondisikan kode Anda menjadi seperti berikut :

1. <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
2. xmlns:tools="http://schemas.android.com/tools"
3. android:layout_width="match_parent"
4. android:layout_height="match_parent"

Erlangga, S.Kom., M.T. 88


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

5. android:orientation="vertical"
6. android:padding="16dp"
7. tools:context="com.studio.erlangga.myflexiblefragment.CategoryFragment
">
8. <TextView
9. android:layout_width="match_parent"
10. android:layout_height="wrap_content"
11. android:text="Ini halaman Category"
12. android:layout_marginBottom="@dimen/activity_horizontal_margin"
/>
13. <Button
14. android:id="@+id/btn_detail_category"
15. android:layout_width="match_parent"
16. android:layout_height="wrap_content"
17. android:text="Kategory Lifestyle"/>

2. Setelah selesai dengan layout xml, sekarang pada file CategoryFragment.java modifikasi
kodenya menjadi sebagai berikut :

1. public class CategoryFragment extends Fragment


implements View.OnClickListener {
2. private Button btnDetailCategory;
3. public CategoryFragment() {
4. // Required empty public constructor
5. }
6. @Override
7. public View onCreateView(LayoutInflater inflater, ViewGroup
container,
8. Bundle savedInstanceState) {
9. // Inflate the layout for this fragment
10. View view = inflater.inflate(R.layout.fragment_category,
container, false);
11. btnDetailCategory =
(Button)view.findViewById(R.id.btn_detail_category);
12. btnDetailCategory.setOnClickListener(this);
13. return view;
14. }
15. @Override
16. public void onClick(View v) {
17. if (v.getId() == R.id.btn_detail_category){
18. }
19. }
20. }

Erlangga, S.Kom., M.T. 89


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

3. Pada langkah diatas kita sedang menyiapkan langkah selanjutnya, bagaimana kita bisa
mengirimkan data dari satu fragment ke fragment lain. Sekarang pada HomeFragment
tambahkan baris berikut pada method onClick().

1. CategoryFragment mCategoryFragment = new CategoryFragment();


2. FragmentManager mFragmentManager = getFragmentManager();
3. FragmentTransaction mFragmentTransaction =
mFragmentManager.beginTransaction();
4. mFragmentTransaction.replace(R.id.frame_container, mCategoryFragment,
CategoryFragment.class.getSimpleName());
5. mFragmentTransaction.addToBackStack(null);
6. mFragmentTransaction.commit();

4. Sehingga kode dari HomeFragment kita sekarang menjadi sebagai berikut :

1. public class HomeFragment extends Fragment implements


View.OnClickListener{
2. public HomeFragment() {
3. // Required empty public constructor
4. }
5. @Override
6. public View onCreateView(LayoutInflater inflater, ViewGroup
container,
7. Bundle savedInstanceState) {
8. // Inflate the layout for this fragment
9. View view = inflater.inflate(R.layout.fragment_home,
container, false);
10. Button btnCategory =
(Button)view.findViewById(R.id.btn_category);
11. btnCategory.setOnClickListener(this);
12. return view;
13. }
14. @Override
15. public void onClick(View v) {
16. if (v.getId() == R.id.btn_category){
17. //todo to CategoryFragment
18. CategoryFragment mCategoryFragment = new
CategoryFragment();
19. FragmentManager mFragmentManager = getFragmentManager();
20. FragmentTransaction mFragmentTransaction =
mFragmentManager.beginTransaction();
21. mFragmentTransaction.replace(R.id.frame_container,
mCategoryFragment, CategoryFragment.class.getSimpleName());
22. mFragmentTransaction.addToBackStack(null);

Erlangga, S.Kom., M.T. 90


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

23. mFragmentTransaction.commit();
24. }
25. }
26. }

5. Setelah selesai, silakan jalankan aplikasi lagi dan coba klik tombol Ke Halaman
Category, aplikasi sudah berpindah tampilan tanpa berpindah activity!

Bedah Code Flexible Fragment di Satu Activity

Anda telah belajar bagaiman berpindah tampilan tanpa harus berpindah activity, dengan
fragment hal tersebut menjadi terlihat mudah. Mari kita breakdown satu persatu hal baru yang
baru saja Anda tulis :

1. FragmentManager mFragmentManager = getFragmentManager();


2. FragmentTransaction mFragmentTransaction =
mFragmentManager.beginTransaction();
3. mFragmentTransaction.replace(R.id.frame_container, mCategoryFragment,
CategoryFragment.class.getSimpleName());
4. mFragmentTransaction.addToBackStack(null);
5. mFragmentTransaction.commit();

Ya baris diatas seperti pada sebelumnya kita memanfaatkan FragmentManager untuk


mengorganize atau mengkoordinasi semua obyek fragment yang terdapat didalam sebuah
activity dan menempelkan CategoryFragment kedalam activity dengan menggunakan
FragmentTransaction.

Ada yang beda disini, kita menggunakan method replace() dan bukan add() ketika ingin
menempelkan sebuah fragment baru. Ya, dengan parameter input yang sama pada method
add(), method replace() akan mengganti obyek fragment yang sedang tampil saat ini,
HomeFragment dengan obyek fragment yang baru, CategoryFragment.

Erlangga, S.Kom., M.T. 91


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

1. mFragmentTransaction.replace(R.id.frame_container, mCategoryFragment,
CategoryFragment.class.getSimpleName());

Ok Anda, pasti menanyakan kenapa ada mFragmentTransaction.addToBackStack(null)


setelahnya? Kita menggunakan addToBackStack(null) karena kita ingin obyek fragment yang
saat ini kita ciptakan masuk kedalam sebuah fragment stack yang nantinya ketika kita tekan
tombol back dia akan pop-out keluar dari stack dan menampilkan obyek fragment sebelumnya,
HomeFragment.

Sekarang, jika Anda menghapus baris tersebut dan menjalankan ulang aplikasi Anda, pasti Anda
akan melihat bahwa ketika Anda mengklik tombol back pada peranti Anda, aplikasi akan
langsung tertutup.

Codelab Mengirim Data Antar Fragment

Kita telah belajar bagaimana berpindah dari satu fragment ke fragment lain, kurang lengkap
rasanya jika kita belum tahu bagaimana berpindah fragment dengan membawa data. Terdapat
dua cara, 1. Dengan menggunakan obyek Bundle dan 2. Dengan menggunakan setter dan
getter. Mari kita langsung praktek untuk kedua cara tersebut.

1. Buat Fragment lagi dengan cara yang sama dengan nama DetailCategoryFragment. Pada
fragment_detail_category.xml sesuaikan kodenya menjadi seperti berikut:
2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android
"
3. xmlns:tools="http://schemas.android.com/tools"
4. android:layout_width="match_parent"
5. android:layout_height="match_parent"
6. android:padding="16dp"
7. android:orientation="vertical"
8. tools:context="com.dicoding.associate.myflexiblefragment.DetailCateg
oryFragment">
9. <TextView
10. android:id="@+id/tv_category_name"
11. android:layout_width="match_parent"
12. android:layout_height="wrap_content"

Erlangga, S.Kom., M.T. 92


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

13. android:text="Category Name"


14. android:layout_marginBottom="16dp"/>
15. <TextView
16. android:id="@+id/tv_category_description"
17. android:layout_width="match_parent"
18. android:layout_height="wrap_content"
19. android:text="Category Description"
20. android:layout_marginBottom="16dp"/>
21. <Button
22. android:id="@+id/btn_profile"
23. android:layout_width="match_parent"
24. android:layout_height="wrap_content"
25. android:text="Ke Halaman Activity"/>
26. <Button
27. android:id="@+id/btn_show_dialog"
28. android:layout_width="match_parent"
29. android:layout_height="wrap_content"
30. android:text="Tampilkan sebuah dialog"/>
31. </LinearLayout>
32. Setelah selesai, silakan lengkapi kode pada DetailCategoryFragment.java menjadi seperti
berikut :
33. public class DetailCategoryFragment extends Fragment implements
View.OnClickListener{
34. private TextView tvCategoryName;
35. private TextView tvCategoryDescription;
36. private Button btnProfile;
37. private Button btnShowDialog;
38. public static String EXTRA_NAME = "extra_name";
39. private String description;
40. public DetailCategoryFragment() {
41. // Required empty public constructor
42. }
43. public String getDescription() {
44. return description;
45. }
46. public void setDescription(String description) {
47. this.description = description;
48. }
49. @Override
50. public View onCreateView(LayoutInflater inflater, ViewGroup
container,
51. Bundle savedInstanceState) {
52. // Inflate the layout for this fragment
53. View view
= inflater.inflate(R.layout.fragment_detail_category, container,
false);
54. tvCategoryName =
(TextView)view.findViewById(R.id.tv_category_name);

Erlangga, S.Kom., M.T. 93


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

55. tvCategoryDescription =
(TextView)view.findViewById(R.id.tv_category_description);
56. btnProfile = (Button)view.findViewById(R.id.btn_profile);
57. btnProfile.setOnClickListener(this);
58. btnShowDialog =
(Button)view.findViewById(R.id.btn_show_dialog);
59. btnShowDialog.setOnClickListener(this);
60. return view;
61. }
62. @Override
63. public void onActivityCreated(@Nullable Bundle savedInstanceState)
{
64. super.onActivityCreated(savedInstanceState);
65. String categoryName = getArguments().getString(EXTRA_NAME);
66. tvCategoryName.setText(categoryName);
67. tvCategoryDescription.setText(getDescription());
68. }
69. @Override
70. public void onClick(View v) {
71. switch (v.getId()){
72. case R.id.btn_profile:
73. break;
74. case R.id.btn_show_dialog:
75. break;
76. }
77. }
78. }

Kode diatas akan mendemonstrasikan bagaimana melakukan penampilan data yang dikirim
melalui perpindahan fragment.

79. Baik, tinggal selangkah lagi proses implementasi dari pengiriman data melalui perpindahan
fragment selesai, sekarang buka kembali CategoryFragment.java lalu tambahkan baris
berikut pada method onClick().
80. Override
81. public void onClick(View v) {
82. if (v.getId() == R.id.btn_detail_category){
83. DetailCategoryFragment mDetailCategoryFragment = new
DetailCategoryFragment();
84. Bundle mBundle = new Bundle();
85. mBundle.putString(DetailCategoryFragment.EXTRA_NAME,
"Lifestyle");
86. String description = "Kategori ini akan berisi produk-produk
lifestyle";
87. mDetailCategoryFragment.setArguments(mBundle);

Erlangga, S.Kom., M.T. 94


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

88. mDetailCategoryFragment.setDescription(description);
89. FragmentManager mFragmentManager = getFragmentManager();
90. FragmentTransaction mFragmentTransaction =
mFragmentManager.beginTransaction();
91. mFragmentTransaction.replace(R.id.frame_container,
mDetailCategoryFragment,
92. DetailCategoryFragment.class.getSimpleName());
93. mFragmentTransaction.addToBackStack(null);
94. mFragmentTransaction.commit();
95. }
96. }

Sehingga kode CategoryFragment kita sekarang menjadi :

1. public class CategoryFragment extends Fragment implements


View.OnClickListener {
2. private Button btnDetailCategory;
3. public CategoryFragment() {
4. // Required empty public constructor
5. }
6. @Override
7. public View onCreateView(LayoutInflater inflater, ViewGroup
container,
8. Bundle savedInstanceState) {
9. // Inflate the layout for this fragment
10. View view = inflater.inflate(R.layout.fragment_category,
container, false);
11. btnDetailCategory =
(Button)view.findViewById(R.id.btn_detail_category);
12. btnDetailCategory.setOnClickListener(this);
13. return view;
14. }
15. @Override
16. public void onClick(View v) {
17. if (v.getId() == R.id.btn_detail_category){
18. DetailCategoryFragment mDetailCategoryFragment = new
DetailCategoryFragment();
19. Bundle mBundle = new Bundle();
20. mBundle.putString(DetailCategoryFragment.EXTRA_NAME,
"Lifestyle");
21. String description = "Kategori ini akan berisi produk-
produk lifestyle";
22. mDetailCategoryFragment.setArguments(mBundle);
23. mDetailCategoryFragment.setDescription(description);
24. FragmentManager mFragmentManager = getFragmentManager();
25. FragmentTransaction mFragmentTransaction =
mFragmentManager.beginTransaction();
26. mFragmentTransaction.replace(R.id.frame_container,
mDetailCategoryFragment,
Erlangga, S.Kom., M.T. 95
Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

27. DetailCategoryFragment.class.getSimpleName());
28. mFragmentTransaction.addToBackStack(null);
29. mFragmentTransaction.commit();
30. }
31. }
32. }

97. Sekarang, setelah selesai semua, silakan Anda jalankan aplikasinya untuk melihat hasil dari
kode yang diatas. Seharusnya ketika Anda mengklik tombol Kategory Lifestyle pada
CategoryFragment akan ada data yang dikirimkan sewaktu perpindahan fragment yang itu
melalui object bundle dan mekanisme metode setter and getter. Tampilan aplikasi Anda
sekarang sudah menjadi seperti ini.

Bedah Code Mengirim Data Antar Fragment

Mantap, Anda sekarang sudah bisa berpindah dari satu fragment ke fragment lain dengan
mengirimkan data. Ya seperti yang sudah dijelaskan diawal, kita memiliki dua mekanisme dalam
mengirimkan data antar fragment yaitu:
Erlangga, S.Kom., M.T. 96
Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Dengan Menggunakan Bundle

1. Bundle mBundle = new Bundle();


2. mBundle.putString(DetailCategoryFragment.EXTRA_NAME, "Lifestyle");

Pada kode diatas, kita menggunakan obyek Bundle untuk mengirimkan data antar fragment,
perhatikan cara yang digunakan sama dengan cara yang telah kita implementasikan
sebelumnya di Activity. Setelah dibuat obyeknya dan data yang mau dikirimkan apa kemudian
kita hanya perlu menambahkan sebaris kode berikut :

1. mDetailCategoryFragment.setArguments(mBundle);

Dan cara mengambil data yang dikirimkan melalui obyek Bundle pada Fragment tujuan
sangatlah mudah hanya dengan memanggil metode getArguments() di fragment
DetailCategoryFragment seperti berikut :

1. String categoryName = getArguments().getString(EXTRA_NAME);

Kelas Bundle merupakan kelas map data string untuk obyek-obyek parcelable. Di sini kita bisa
menginputkan lebih dari satu parameter/variabel ke dalam obyek Bundle.

Dengan Menggunakan Setter dan Getter

Kelas fragment adalah kelas java pada umumnya, dengan menggunakan metode setter dan
getter untuk mengirimkan parameter/variabel dari satu fragment ke fragment lainnya. Seperti
baris berikut :

1. String description = "Kategori ini akan berisi produk-produk


lifestyle";
2. mDetailCategoryFragment.setDescription(description);

Erlangga, S.Kom., M.T. 97


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Yang mana isi kode pada kelas DetailCategoryFragment sebagai berikut :

1. public static String EXTRA_NAME = "extra_name";


2. private String description;
3. public DetailCategoryFragment() {
4. // Required empty public constructor
5. }
6. public String getDescription() {
7. return description;
8. }
9. public void setDescription(String description) {
10. this.description = description;
11. }

Cara menggunakannya juga cukup mudah, hanya dengan menempatkan value yang ingin
dikirimkan via metode setter lalu diambil dengan menggunakan metode getter seperti pada
baris berikut :

1. tvCategoryDescription.setText(getDescription());

Mudah kan? dua cara diatas sudah umum dilakukan dan diimplementasikan ke dalam project
pengembangan aplikasi android. Selamat! Sejauh ini Anda sudah memahami lebih jauh tentang
Fragment dari bagaimana membuat, menempelkan ke activity hingga berpindah antar fragment
dengan atau tidak membawa data.

Codelab Fragment Untuk Dialog

Selanjutnya kita masuk ke pemanfaatan fragment untuk menampilkan sebuah custom dialog.
Kita akan menggunakan DialogFragment lengkap dengan interaksinya. Siap? Ayo kita lanjutkan
ngodingnya.

1. Baik sekarang buat kembali satu kelas Fragment dengan nama OptionDialogFragment,
jangan lupa untuk uncheck pilihan include fragment factory methods dan include interface

Erlangga, S.Kom., M.T. 98


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

methods. Ketika sudah diciptakan, pada fragment_option_dialog.xml kondisikan kode nya


menjadi seperti berikut :

1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android
"
2. xmlns:tools="http://schemas.android.com/tools"
3. android:layout_width="match_parent"
4. android:layout_height="wrap_content"
5. android:orientation="vertical"
6. android:padding="@dimen/activity_vertical_margin"
7. tools:context="com.dicoding.associate.myflexiblefragment.OptionDialo
gFragment">
8. <TextView
9. android:layout_width="match_parent"
10. android:layout_height="wrap_content"
11. android:text="Siapa pelatih tersukses Machester United?"
12. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
13. <RadioGroup
14. android:id="@+id/rg_options"
15. android:layout_width="match_parent"
16. android:layout_height="wrap_content"
17. android:orientation="vertical">
18. <RadioButton
19. android:id="@+id/rb_saf"
20. android:layout_width="match_parent"
21. android:layout_height="wrap_content"
22. android:text="Sir Alex Ferguson"
23. android:layout_marginBottom="@dimen/activity_vertical_margi
n"/>
24. <RadioButton
25. android:id="@+id/rb_mou"
26. android:layout_width="match_parent"
27. android:layout_height="wrap_content"
28. android:text="Jose Mourinho"
29. android:layout_marginBottom="@dimen/activity_vertical_margi
n"/>
30. <RadioButton
31. android:id="@+id/rb_lvg"
32. android:layout_width="match_parent"
33. android:layout_height="wrap_content"
34. android:text="Louis Van Gaal"
35. android:layout_marginBottom="@dimen/activity_vertical_margi
n"/>
36. <RadioButton
37. android:id="@+id/rb_moyes"
38. android:layout_width="match_parent"
39. android:layout_height="wrap_content"
40. android:text="David Moyes"

Erlangga, S.Kom., M.T. 99


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

41. android:layout_marginBottom="@dimen/activity_vertical_margi
n"/>
42. </RadioGroup>
43. <LinearLayout
44. android:layout_width="match_parent"
45. android:layout_height="wrap_content"
46. android:orientation="horizontal">
47. <Button
48. android:id="@+id/btn_close"
49. android:layout_width="match_parent"
50. android:layout_height="wrap_content"
51. android:layout_weight="0.5"
52. android:text="Tutup"
53. android:layout_marginRight="4dp"/>
54. <Button
55. android:id="@+id/btn_choose"
56. android:layout_width="match_parent"
57. android:layout_height="wrap_content"
58. android:layout_weight="0.5"
59. android:text="Pilih"
60. android:layout_marginLeft="4dp"/>
61. </LinearLayout>
62. </LinearLayout>

2. Setelah selesai dengan berkas layout xml sekarang, lanjutkan ngoding untuk
OptionDialogFragment. Kondisikan, kodenya menjadi sebagai berikut :

1. public class OptionDialogFragment extends DialogFragment


implements View.OnClickListener{
2. private Button btnChoose, btnClose;
3. private RadioGroup rgOptions;
4. private RadioButton rbSaf, rbMou, rbLvg, rbMoyes;
5. private OnOptionDialogListener onOptionDialogListener;
6. public OptionDialogFragment() {
7. // Required empty public constructor
8. }
9. public OnOptionDialogListener getOnOptionDialogListener() {
10. return onOptionDialogListener;
11. }
12. public void setOnOptionDialogListener(OnOptionDialogListener
onOptionDialogListener) {
13. this.onOptionDialogListener = onOptionDialogListener;
14. }
15. @Override
16. public View onCreateView(LayoutInflater inflater, ViewGroup
container,
17. Bundle savedInstanceState) {

Erlangga, S.Kom., M.T. 100


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

18. View view = inflater.inflate(R.layout.fragment_option_dialog,


container, false);
19. btnChoose = (Button)view.findViewById(R.id.btn_choose);
20. btnChoose.setOnClickListener(this);
21. btnClose = (Button)view.findViewById(R.id.btn_close);
22. btnClose.setOnClickListener(this);
23. rgOptions = (RadioGroup)view.findViewById(R.id.rg_options);
24. rbSaf = (RadioButton)view.findViewById(R.id.rb_saf);
25. rbLvg = (RadioButton)view.findViewById(R.id.rb_lvg);
26. rbMou = (RadioButton)view.findViewById(R.id.rb_mou);
27. rbMoyes = (RadioButton)view.findViewById(R.id.rb_moyes);
28. return view;
29. }
30. @Override
31. public void onClick(View v) {
32. switch (v.getId()){
33. case R.id.btn_close:
34. getDialog().cancel();
35. break;
36. case R.id.btn_choose:
37. int checkedRadioButtonId =
rgOptions.getCheckedRadioButtonId();
38. if (checkedRadioButtonId != -1){
39. String coach = null;
40. switch (checkedRadioButtonId){
41. case R.id.rb_saf:
42. coach = rbSaf.getText().toString().trim();
43. break;
44. case R.id.rb_mou:
45. coach = rbMou.getText().toString().trim();
46. break;
47. case R.id.rb_lvg:
48. coach = rbLvg.getText().toString().trim();
49. break;
50. case R.id.rb_moyes:
51. coach =
rbMoyes.getText().toString().trim();
52. break;
53. }
54. getOnOptionDialogListener().onOptionChoosen(coach);
55. getDialog().cancel();
56. }
57. break;
58. }
59. }
60. public interface OnOptionDialogListener{
61. void onOptionChoosen(String text);
62. }
63. }

Erlangga, S.Kom., M.T. 101


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Ingat, inherit ke kelas DialogFragment pada android support library.

3. Setelah selesai, tambahkan beberapa baris pada metode onClick() di


DetailCategoryFragment menjadi sebagai berikut :
4. @Override
5. public void onClick(View v) {
6. switch (v.getId()){
7. case R.id.btn_profile:
8. break;
9. case R.id.btn_show_dialog:
10. OptionDialogFragment mOptionDialogFragment = new
OptionDialogFragment();
11. mOptionDialogFragment.setOnOptionDialogListener(new
OptionDialogFragment.OnOptionDialogListener() {
12. @Override
13. public void onOptionChoosen(String text) {
14. Toast.makeText(getActivity(), text,
Toast.LENGTH_SHORT).show();
15. }
16. });
17. FragmentManager mFragmentManager =
getChildFragmentManager();
mOptionDialogFragment.show(mFragmentManager,OptionDialogFragment.class.
getSimpleName());
18. break;
19. }
20. }
21. Sehingga kode DetailCategoryFragment kita saat ini menjadi seperti ini :

1. public class DetailCategoryFragment extends Fragment implements


View.OnClickListener{
2. private TextView tvCategoryName;
3. private TextView tvCategoryDescription;
4. private Button btnProfile;
5. private Button btnShowDialog;
6. public static String EXTRA_NAME = "extra_name";
7. private String description;
8. public DetailCategoryFragment() {
9. // Required empty public constructor
10. }
11. public String getDescription() {
12. return description;
13. }
14. public void setDescription(String description) {
15. this.description = description;
16. }

Erlangga, S.Kom., M.T. 102


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

17. @Override
18. public View onCreateView(LayoutInflater inflater, ViewGroup
container,
19. Bundle savedInstanceState) {
20. // Inflate the layout for this fragment
21. View view
= inflater.inflate(R.layout.fragment_detail_category, container,
false);
22. tvCategoryName =
(TextView)view.findViewById(R.id.tv_category_name);
23. tvCategoryDescription =
(TextView)view.findViewById(R.id.tv_category_description);
24. btnProfile = (Button)view.findViewById(R.id.btn_profile);
25. btnProfile.setOnClickListener(this);
26. btnShowDialog =
(Button)view.findViewById(R.id.btn_show_dialog);
27. btnShowDialog.setOnClickListener(this);
28. return view;
29. }
30. @Override
31. public void onActivityCreated(@Nullable Bundle savedInstanceState)
{
32. super.onActivityCreated(savedInstanceState);
33. String categoryName = getArguments().getString(EXTRA_NAME);
34. tvCategoryName.setText(categoryName);
35. tvCategoryDescription.setText(getDescription());
36. }
37. @Override
38. public void onClick(View v) {
39. switch (v.getId()){
40. case R.id.btn_profile:
41. break;
42. case R.id.btn_show_dialog:
43. OptionDialogFragment mOptionDialogFragment = new
OptionDialogFragment();
44. mOptionDialogFragment.setOnOptionDialogListener(new
OptionDialogFragment.OnOptionDialogListener() {
45. @Override
46. public void onOptionChoosen(String text) {
47. Toast.makeText(getActivity(), text,
Toast.LENGTH_SHORT).show();
48. }
49. });
50. FragmentManager mFragmentManager =
getChildFragmentManager();
51. mOptionDialogFragment.show(mFragmentManager,
OptionDialogFragment.class.getSimpleName());
52. break;
53. }
54. }

Erlangga, S.Kom., M.T. 103


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

55. }

22. Sekarang jalankan kembali aplikasi dan klik pada tombol Tampilkan sebuah dialog dan
hasilnya akan muncul obyek OptionDialogFragment yang baru saja kita buat, dan coba
Anda pilih salah satu option yang ada dan klik tombol Pilih, lihat hasil dari yang kita pilih
tampil ke dalam bentuk soft message (Toast).

Bedah Code Fragment Untuk Dialog

1. public class OptionDialogFragment extends DialogFragment

Sama dengan obyek fragment seperti sebelumnya, di sini kelas fragment yang kita buat inherit
ke DialogFragment. Dengan begitu, obyek fragment sekarang merupakan obyek dialog yang
akan tampil mengambang dilayar, seperti pada obyek modal pada platform lain, obyek

Erlangga, S.Kom., M.T. 104


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

DialogFragment dapat disesuaikan tampilan dan fungsinya secara spesifik. Di sini kita
menampillkan sebuah dialog ke pengguna untuk memilih sebuah opsi yang disediakan.

1. OptionDialogFragment mOptionDialogFragment = new


OptionDialogFragment();
2. mOptionDialogFragment.setOnOptionDialogListener(new
OptionDialogFragment.OnOptionDialogListener() {
3. @Override
4. public void onOptionChoosen(String text) {
5. Toast.makeText(getActivity(), text, Toast.LENGTH_SHORT).show();
6. }
7. });
8.
9. FragmentManager mFragmentManager = getChildFragmentManager();
10. mOptionDialogFragment.show(mFragmentManager,
OptionDialogFragment.class.getSimpleName());

Pada proses pemanggilannya pun hampir sama dengan yang kita lakukan sebelumnya. Namun
perbedaanya ada disini.

1. FragmentManager mFragmentManager = getChildFragmentManager();

Kita tidak menggunakan getFragmentManager() saat ini, getChildFragmentManager()


merupakan pilihan yang tepat untuk kondisi saat ini, sebuah nested fragment / fragment
bersarang. Karena OptionDialogFragment dipanggil didalam sebuah obyek fragment yang telah
ada sebelumnya yaitu, DetailDialogFragment, maka untuk performa yang lebih baik
penggunaan getChildFragmentManager() adalah pilihan yang tepat.

1. mOptionDialogFragment.show(mFragmentManager,
OptionDialogFragment.class.getSimpleName());

Baris diatas digunakan untuk menampilkan obyek OptionDialogFragment ke layar.

Untuk proses handling event ketika tombol Pilih pada OptionDialogFragment diklik, kita
menggunakan implementasi interface. Bagi yang belum paham tentang definisi interface pada
pemrograman java berikut definisi singkatnya.

Erlangga, S.Kom., M.T. 105


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Interface adalah sebuah kelas yang terdiri kumpulan method yang hanya memuat deklarasi
dan struktur method, tanpa detail implementasinya.

Tautan berikut akan membantu pemahaman Anda tentang Interface.

 Interface

Kelas interface yang kita punya pada OptionDialogFragment adalah sebagai berikut :

1. public interface OnOptionDialogListener{


2. void onOptionChoosen(String text);
3. }

Dimana kita menggunakannya pada bagian ini :

1. int checkedRadioButtonId = rgOptions.getCheckedRadioButtonId();


2. if (checkedRadioButtonId != -1){
3. String coach = null;
4. switch (checkedRadioButtonId){
5. case R.id.rb_saf:
6. coach = rbSaf.getText().toString().trim();
7. break;
8. case R.id.rb_mou:
9. coach = rbMou.getText().toString().trim();
10. break;
11. case R.id.rb_lvg:
12. coach = rbLvg.getText().toString().trim();
13. break;
14. case R.id.rb_moyes:
15. coach = rbMoyes.getText().toString().trim();
16. break;
17. }
18. getOnOptionDialogListener().onOptionChoosen(coach);
19. getDialog().cancel();
20. }

Erlangga, S.Kom., M.T. 106


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

Dan mengimplementasikannya pada bagian ini :

1. mOptionDialogFragment.setOnOptionDialogListener(new
OptionDialogFragment.OnOptionDialogListener() {
2. @Override
3. public void onOptionChoosen(String text) {
4. Toast.makeText(getActivity(), text, Toast.LENGTH_SHORT).show();
5. }
6. });

Jadi ketika pengguna mengklik tombol Pilih setelah mengklik salah satu pilihan, baris ini akan
dieksekusi :

1. getOnOptionDialogListener().onOptionChoosen(coach);

Yang kemudian, metode onOptionChoosen() pada baris ini akan dipanggil untuk menampilkan
nilai dari pilihan yang dipilih pada Toast.

1. mOptionDialogFragment.setOnOptionDialogListener(new
OptionDialogFragment.OnOptionDialogListener() {
2. @Override
3. public void onOptionChoosen(String text) {
4. Toast.makeText(getActivity(), text, Toast.LENGTH_SHORT).show();
5. }
6. });

Cool, sejauh ini kami harap Anda sudah lebih memahami tentang bentuk dan implementasi
fragment seperti apa. Terakhir sebelum sesi ini selesai kita akan belajar bagaimana
menjalankan sebuah Activity dari fragment. Caranya pun hampir sama dengan apa yang telah
kita pelajari di Activity.

Sekarang, buat sebuah Activity dengan nama ProfileActivity dan setelah terbentuk, pada
activity_profile.xml kondisikan kode yang ada menjadi sebagai berikut :

1. <?xml version="1.0" encoding="utf-8"?>


2. <RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"

Erlangga, S.Kom., M.T. 107


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)
MODUL PEMBELAJARAN MATA KULIAH KEAHLIAN REKAYASA
PERANGKAT LUNAK
IK322 – MOBILE PROGRAMING

3. xmlns:tools="http://schemas.android.com/tools"
4. android:layout_width="match_parent"
5. android:layout_height="match_parent"
6. android:paddingBottom="@dimen/activity_vertical_margin"
7. android:paddingLeft="@dimen/activity_horizontal_margin"
8. android:paddingRight="@dimen/activity_horizontal_margin"
9. android:paddingTop="@dimen/activity_vertical_margin"
10. tools:context="com.dicoding.associate.myflexiblefragment.ProfileAct
ivity">
11. <TextView
12. android:layout_width="match_parent"
13. android:layout_height="wrap_content"
14. android:text="Ini Profile Activity"/>
15. </RelativeLayout>

Kemudian pada method onClick() pilihan R.id.btn_profile di kelas DetailCategoryFragment


tambahkan beberapa baris berikut untuk menjalankan ProfileActivity :

1. Intent mIntent = new Intent(getActivity(), ProfileActivity.class);


2. startActivity(mIntent);

Dimana getActivity() adalah kelas activity dimana fragment tersebut ditempelkan.

Setelah selesai semua, coba jalankan aplikasi Anda dan klik tombol Ke Halaman Profile Activity.

Akhirnya, setelah melalui banyak perjuangan dan barisan kode yang Anda tulis sekarang Anda
sudah berhasil memahami bagaimana komponen fragment bekerja. Selanjutnya, akan ada
codelab tentang implementasi lanjut dari fragment. Ayo kita lanjut lagi, Semangat Ngoding!

Erlangga, S.Kom., M.T. 108


Departemen Pendidikan Ilmu Komputer
Fakultas Pendidikan Matematika dan Ilmu Pengetahuan Alam (FPMIPA)

Anda mungkin juga menyukai