Modul Android Untuk Pemula
Modul Android Untuk Pemula
Untuk lebih mendalami activity, kami menyarankan Anda untuk membaca referensi berikut :
• Activities
Activity Lifecycle
Developer yang baik harus mengetahui secara detail tentang life cycle sebuah activity.
Terutama untuk melakukan aksi yang tepat, saat terjadi perubahan state activity. Callback
methods yang ada dapat digunakan untuk melakukan beragam proses terkait state dari
activity. Misalnya melakukan semua inisialisasi komponen di onCreate(), melakukan
disconnect terhadap koneksi ke server pada onStop() atau onDestroy() dan lain sebagainya.
Pemahaman yang baik tentang daur hidup activity akan membuat implementasi rancangan
aplikasi Anda menjadi lebih baik. Hal ini juga akan meminimalisir terjadinya error/bug/force
close yang tidak diinginkan.
Last In, First Out (LIFO)
2. Gambar 2
Activity kedua sudah muncul di layar sekarang. Ketika Anda menekan tombol back
pada physical button menu utama atau menjalankan metode finish(), maka activity
kedua Anda akan dikeluarkan dari stack.
Pada kondisi di atas, state activity kedua akan berada pada destroy. Oleh karenanya,
metode onDestroy() akan dipanggil.
Kejadian keluar dan masuk stack pada proses di atas menandakan sebuah model Last
In, First Out. Activity kedua menjadi yang terakhir masuk stack (Last In) dan yang
paling pertama keluar dari stack (First Out).
3. Gambar 3
Activity Pertama akan dimunculkan kembali di layar setelah melalui beberapa state
dengan rangkaian callback method yang terpanggil, onStop → onRestart → onStart
→ onResume.
• LifeCycle
Ketika sebuah activity mengalami pause kemudian resume, maka state dari sebuah activity
tersebut dapat terjaga. Sebabnya, obyek activity masih tersimpan di memory sehingga dapat
dikembalikan state-nya.
Dengan menjaga state dari activity, maka ketika activity tersebut ditampilkan, kondisinya
akan tetap sama dengan kondisi sebelumnya.
Akan tetapi ketika sistem menghancurkan activity untuk keperluan memori misalnya karena
memori habis, maka obyek activity dihancurkan. Alhasil, ketika activity ingin ditampilkan
kembali diperlukan proses re-create activity yang dihancurkan tadi.
Kejadian di atas adalah hal yang lumrah terjadi. Oleh karena itu, perubahan yang terjadi pada
activity perlu disimpan terlebih dahulu sebelum ia dihancurkan. Disinilah metode
onSaveInstanceState() digunakan.
Ketika activity di-restart, bundle akan diberikan kepada metode onCreate dan
onRestoreInstanceState. Bundle tersebut akan dimanfaatkan untuk mengembalikan kembali
perubahan yang telah terjadi sebelumnya.
Proses penghancuran activity dapat juga terjadi ketika terdapat perubahan konfigurasi seperti
perubahan orientasi layar (portrait-landscape), keyboard availability, dan perubahan bahasa.
Penghancuran ini akan menjalankan callback method onDestroy dan kemudian menjalankan
onCreate. Penghancuran ini dimaksudkan agar activity dapat menyesuaikan diri dengan
konfigurasi baru yang muncul pada kejadian-kejadian sebelumnya.
Hal yang perlu diingat ketika menggunakan onSaveInstanceState adalah untuk tidak
menyimpan data yang besar pada bundle. Contohnya, hindari penyimpanan data bitmap pada
bundle. Bila data pada bundle berukuran besar, proses serialisasi dan deserialisasi akan
memakan banyak memori
Activity Latihan Aplikasi Sederhana
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
1. Buat proyek baru dengan klik File → New → New Project pada Android Studio
Anda.
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.
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.
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
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 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:
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
Selanjutnya kita akan mulai melakukan pengkodean aplikasi atau lebih enaknya disebut
ngoding.
Selamat ngoding!
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.
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="lebar">Lebar</string>
4. <string name="tinggi">Tinggi</string>
5. <string name="hitung">Hitung</string>
6. <string name="hasil">Hasil</string>
7. <string name="panjang">panjang</string>
8. </resources>
5. 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.
6. Kemudian isi sesuai di bawah ini.
7. Jika berkas dimens.xml sudah dibuat, sesuaikan isinya menjadi seperti berikut.
1. <resources>
2. <!-- Default screen margins, per the Android Design
guidelines. -->
3. <dimen name="activity_horizontal_margin">16dp</dimen>
4. <dimen name="activity_vertical_margin">16dp</dimen>
5. </resources>
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.
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.
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 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.
1. private static final String STATE_HASIL = "state_hasil";
2.
3. @Override
4. protected void onSaveInstanceState(Bundle outState) {
5.
6. outState.putString(STATE_HASIL,
tvResult.getText().toString());
7. super.onSaveInstanceState(outState);
8. }
Kemudian tambahkan juga beberapa baris berikut pada baris terakhir metode
onCreate.
9. if (savedInstanceState != null){
10. String hasil =
savedInstanceState.getString(STATE_HASIL);
11. tvResult.setText(hasil);
12. }
4. Silakan jalankan kembali aplikasinya. Ulangi proses perhitungan seperti sebelumnya.
Kemudian ganti orientasi peranti Anda. Jika sudah benar maka hasil perhitungan tidak
akan hilang.
Bedah Kode
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:
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:
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.
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"/>
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.
Acuan untuk menyusun tampilan pada relativelayout akan dibahas pada modul selanjutnya.
Pembahasan tentang Logika Kode
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).
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.
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.
Pembahasan saveInstanceState
1. @Override
2. protected void onSaveInstanceState(Bundle outState) {
3.
4. outState.putString(STATE_HASIL, tvResult.getText().toString());
5. super.onSaveInstanceState(outState);
6. }
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.
Selamat! Anda telah berhasil membuat dan menjalankan latihan Android pertama di peranti
atau emulator. Silakan lanjut ke codelab berikutnya.
Referensi:
Dicoding.com