BAB 1
Android Intro
Tujuan khusus :
Siswa dapat :
Android adalah sebuah Operating System berbasis Linux dengan tatap muka bahasa
pemrograman Java untuk perangkat selular seperti smartphone seperti perangkat layar
sentuh yang mendukung OS Android dan termasuk perangkat Tablets. Android
dikembangkan oleh Open Handset Alliance (OHA), yang digawangi oleh Google Inc. OHA
adalah himpunan beberapa perusahaan seperti Samsung, Sony, Intel dan perusahaan lain
yang menyediakan layanan serta menggunakan handset untuk platform Android.
Pada tahun 2007, Google meluncurkan versi beta pertama dari Android Software
Development Kit atau yang dikenal dengan SDK. Setelahnya, tepatnya pada bulan
September 2008, Google juga meluncurkan versi komersial pertama dari Android 1.0 yang
diberi nama Alpha.
Pada tahun 2012, Google meluncurkan versi lain Android yakni Android 4.1 yang
diberi nama Android Jelly Bean. Android versi ini (Jelly Bean), merupakan versi Android
dengan pembaharuan tambahan dan memiliki banyak peningkatan dalam tatap muka,
fungsionalitas dan performanya.
Pada tahun 2014, Google meluncurkan versi terbaru Android mereka, yakni Android
versi 5.0 yang diberi nama Lollipop. Pada Android Lollipop, Google benar-benar melakukan
perombakan pada bagian tatap muka dengan menggunakan desain Materials sangat baik
untuk tatap muka yang digunakan serta bagus untuk tema perangkat yang sedang
terpasang.
Source code Android tersedia dan bisa didapatkan di Git-Hub, Stack overflow dan banyak
situs lainnya. Umumnya source code yang diluncurkan Google berada dibawah Lisensi
Apache versi 2.0. Pada modul ini akan diajarkan pemrograman Android dengan bahasa
Pemrograman Kotlin.
Tabel berikut menampilkan detail versi dari Android yang diluncurkan oleh Google
dari tahun 2007 sampai sekarang :
September 23,
Android 1.0 1 Apple Pie
2008
September 15,
Android 1.6 4 Donut
2009
Android 8.0 26 O
Setelah melalui banyak perkembangan, JetBrains merilis Kotlin secara open source
dan kini setelah perkembangannya semakin maju, Google mendukung penuh Kotlin untuk
pengembangan aplikasi Android. Ini artinya Kotlin menjadi bahasa pemrograman ketiga
yang didukung oleh android selain Java dan C++.
BAB 2
Android Layout
Tujuan khusus :
Siswa dapat :
BAB 2
Android Layout
UI atau tatap muka pada Android merupakan komponen dari View yang bisa
digunakan untuk mendesain tatap muka/ User Interface (UI) dari sebuah aplikasi. Android
sendiri memiliki variasi UI yang sangat beragam seperti TextView, EditText, Buttons,
Checkbox, Progressbar, Spinners, dll.
Secara umum UI yang dibuat pada aplikasi Android menggunakan koleksi dari objek
View dan ViewGroup.
View merupakan kelas dasar/ base class dari semua komponen UI di Android,
berguna untuk membuat sebuah desain komponen UI yang interaktif seperti TextView,
EditText, Checkbox, Radio Button, dll. Dan bertugas untuk event handling dan menggambar.
Sedangkan ViewGroup merupakan subclass dari View dan bertindak sebagai kelas
dasar untuk layouts dan layout parameter. ViewGroup menyediakan sebuah kontainer yang
tidak terlihat untuk menampung Views atau ViewGroups yang lain, serta berfungsi untuk
mendefinisikan properti dari layout.
Pada pembutan aplikasi Android, kita bisa melakukan pendefinisian UI atau kontrol
masukan dengan dua cara, yaitu:
Di Android, kita bisa membuat sebuah layout seperti pembuatan halaman web di
HTML dengan menggunakan Views dan ViewGroups bawaan di XML file. File layout
hanya boleh berisikan satu root elemen yaitu objek View atau GroupView. Setelah
kita mendefinisikan root elemen, kita bisa menambahkan objek layout tambahan
atau widgets sebagain elemen anak untuk membangun hirarki View yang
membentuk layout aplikasi yang kita buat.
Berikut adalah contoh pembuatan kontrol UI seperti TextView, EditText dan Button
di file XML menggunakan LinearLayout. File yang kita gunakan adalah
activity_main.xml.
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txt_nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nama" />
<EditText
android:id="@+id/nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"/>
<Button
android:id="@+id/getName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Simpan Nama" />
</LinearLayout>
Perlu diingat, pada Android, setiap kontrol masukan memiliki kumpulan event
tertentu dan events inilah yang akan muncul ketika pengguna aplikai kita melakukan
sebuah aksi tertentu sepeti memasukkan tulisan atau menyentuh sebuah tombol
(button).
Hal lain yang perlu diingat ketika membuat UI elemen di file XML adalah membuat
file layout UI tersebut di direktori /res/layout. Hanya file-file layout yang akan di
kompail sempurna pada direktori ini.
Setelah mendefinisikan layout di file XML, berikutnya kita akan memuat file layout
XML tersebut melalui Activity pada fungsi onCreate() seperti berikut:
Perhatikan baris kode diatas, pada baris kode terlihat bahwa kita melakukan
pemanggilan terhadap layout yang telah kita definisikan di file XML menggunakan
fungsi setContentView dalam format R.layout.layout_file_name. Karena nama file
XML yang kita buat/ gunakan adalah main_activity.xml, maka nama file yang kita
gunakan adalah R.layout.activity_main.
Secara umum, selama menjalankan activity, fungsi onCreate() akan dipanggil oleh
kerangka kerja Android untuk mengembalikan layout yang diharapkan untuk sebuah
activity. Activity sendiri adalah tampilan satu layar dengan UI dari aplikasi yang kita
bangun, activity ini akan bertindak sebagai titik masukan untuk pengguna agar bisa
berinteraksi dengan aplikasi yang kita buat.
Aplikasi Android secara umum terdiri dari beberapa layar yang setiap layar tersebut
merupakan turunan dari kelas Activity. Dengan memanfaatkan activites, kita bisa
meletakkan semua komponen UI aplikasi android yang kita bangun dalam satu layar.
Salah satu acitivity dari banyak activity yang ada bisa kita tandai sebagai main activity
yang merupakan layar pertama yang akan muncul saat aplikasi dijalankan.
Jika kita ingin membuat elemen UI di runtime, kita perlu membuat objek View dan
Gorup View kostumisasi kita sendiri dengan mengetikkan baris kodenya untuk
mendapatkan layout yang diharapkan.
Dengan membuat kostumisasi View dan ViewGroup sedara terprogram, kita bisa
mendefinisikan kontrol UI di layout berdasarkan kebutuhan di aplikasi Android yang kita
bangun.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txt_nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nama" />
</LinearLayout>
Jika diperhatikan, pada baris koding diatas, kita menggunakan nilai yang berbeda
untuk mengatur layout_width dan layout_height. Pada contoh diatas kita menggunakan
match_parent dan wrap_content.
Jika kita mengatur match_parent, maka View dan ViewGroup akan mencoba untuk
menyocokkan lebar dan tinggi dengan parent dari layout. Begitupun jika kita mengatur
wrap_content, maka View dan ViewGroup akan mencoba untuk menyesuaikan lebar dan
tinggi berdasarkan konten nantinya.
2.1.1 LinearLayout
Di LinearLayout, contoh/ instances dari turunan View diatur satu persatu, sehingga
untuk bentuk Horizontal akan memiliki satu baris dengan beberapa kolom, sebaliknya
bentuk Vertikal akan memiliki satu kolo, dengan beberapa baris.
a. Membuat LinearLayout
Buatlah sebuah file layout XML baru dengan nama activity_linearlayout.xml, lalu
isikan baris koding berikut:
Berikutnya buatlah sebuah kelas Activity baru dan beri nama ContohLinearLayout
untuk menampung layout XML yang telah kita buat. Berikut hasil tampilan program setelah
dijalankan.
Tampilan diatas menunjukkan tiga buah kontrol yakni TextView yang disusun dalam
LinearLayout.
2.1.2 RelativeLayout
Attribute Description
Attribute Description
a. Membuat RelativeLayout
Buatlah sebuah file layout XML baru dengan nama activity_relativelayout.xml, lalu
isikan baris koding berikut:
Sedikit berbeda, untuk bnt_5, kita mengatur posisinya mengikuti btn_2, sehigga
saat kita atur di atribut android:layout_alignBottom=”@+id/btn_2”, posisi bawah yang
menjadi rujukan adalah posisi dari btn_2, lalu kita atur atribut
android:layout_centerHorizontal=”true” yang artinya posisi btn_5 berda di tengah-
tengah secara Horizontal.
Selanjutnya isikan baris kodingan berikut pada kelas Activity yang telah dibuat sebelumnya.
class ContohRelativeLayout:AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_relativelayout)
}
}
2.1.3 TableLayout
TableLayout mempisisikan turunannya dalam baris dan kolom dan tidak akan
menampilkan border lines untuk baris, kolom maupun cells. Di Android, TableLayout
bekerja seperti halnya tabel HTML, untuk mendefinisikan TableLayout dengan tag <table>
dan untuk TableRow bisa menggunakan tag <tr>.
a. Membuat TableLayout
Selanjutnya agar aplikasi kita menampilkan layout yang telah kita atur, isikan baris
koding berikut di kelas Activity yang telah dibuat.
2.1.4 FrameLayout
a. Membuat FrameLayout
Buatlah sebuah kelas baru dan beri nama ContohFrameLayout, setelahnya buatlah
sebuah file layout XML baru dengan nama activity_framelayout.xml, isikan baris
koding berikut:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/img_BG"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:src="@drawable/book"/>
<TextView
android:id="@+id/txt_View1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:background="#4C374A"
android:padding="10dp"
android:text="Perpustakaan Kita"
android:textColor="#FFFFFF"
android:textSize="20sp"/>
<TextView
android:id="@+id/txt_View2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|bottom"
android:background="#AA000000"
android:padding="10dp"
android:text="21/Aug/2017"
android:textColor="#FFFFFF"
android:textSize="18sp"/>
</FrameLayout>
Pada baris koding diatas, kita menggunakan sebuah foto untuk menjadi background
tampilan bernama book.jpeg yang diletakkan di folder drawable lalu dipanggil
menggunakan atribut android:src=”@drawable/book”, kita menggunakan ImageView
untuk menampilkan gambar ini.
Untuk melihat hasil tampilan, isikan baris koding berikut di kelas Activity yang telah
dibuat sebelumnya.
class ContohFrameLayout:AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_framelayout)
}
}
2.1.5 ListView
Berikutnya kita akan membahas ListView yang juga merupakan sebuah ViewGroup
dan digunakan untuk menampilkan sebuah daftar yang bisa di scroll dan terdiri dari baris-
baris item. Untuk mengisikan baris data kedalam daftar, kita menggunakan data adapter
yang menarik data dari sumber data seperti sebuah array atau database lalu
mengkonversinya kedalam sebuah result view untuk diletakkan kedalam daftar.
Di Android sendiri, Adapter akan berlaku sebagai sebuah perantara antara sumber data view
dari adapter seperti ListView dan GridView untuk memasukka data kedalam view adapter.
Adapter Description
a. Membuat ListView
Pada baris kodingan diatas, kita membuat sebuah ListView dengan memberinya id
lv_anggota untuk menampilkan daftar anggota dari perpustakaan kita.Setelahnya, isikan
baris koding berikut pada kelas Activity yang telah dibuat.
class ContohListView:AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_listview)
val anggota = arrayOf(
"Tomoyo Tomodachi",
"Zayn Malik",
"Zendaya",
"Cara Delevingne",
"Miley Cyrus",
"Zara Larson"
)
val adapter = ArrayAdapter<String>(
this,
android.R.layout.simple_list_item_activated_1, anggota
)
lv_anggota.setAdapter(adapter)
Jika diperhatikan
} pada kodingan diatas, kita membuat sebuah array bernama
}
anggota yang berisikan data anggota perpustakaan kita. Kemudian, kita membuat sebuah
objek adapter untuk membaca array anggota yang telah kita buat, objek adapter ini yang
akan berlaku sebagai perantara antara sumber data kita yang berupa array ke view dari
adapter yakni lv_anggota. Berikut hasil tampilan program setelah dijalankan.
Pada langkah sebelumnya kita telah membuat cara sederhana untuk melakukan
bind data ke ListView menggunakan array. Selanjutnya kita akan membuat sebuah ListView
dengan adapter yang dikostumisasi. Untuk membuat kostumisasi adapter, kita perlu
melakukan extend dari kelas BaseAdapter dan membuat sebuah kelas yang akan
menampung sebuah parameter untuk baris item.
Lakukan modifikasi pada file layout XML yang telah dibuat sebelumya, yakni
activity_listview.xml, isikan baris koding berikut.
Berikutnya, kita akan membuat sebuah layout untuk item baris dari ListView,
buatlah sebuah layout XML baru dengan nama list_row.xml, lalu inikan baris
kodingan berikut.
Buatlah sebuah kelas Activity baru dengan nama ContohListItem, lalu isikan baris
kodingan berikut.
class ContohListItem {
var nama: String = ""
var status: String = ""
var panggilan: String = ""
Method Description
Pada potongan koding diatas, kita memberikan nilai parameter berupa variabel
bertipe Activity dengan nama activity dan sebuah variabel bertipe ArrayList bertipe generic
bernama items.
Variabel activity berguna sebagai objek kelas Activity untuk mengatur layout yang
akan di tampilkand alam aplikasi saat dijalankan, sedangkan variabel items merupakan
objek dari ArrayList generic yang menampung data koleksi dari kelas ContohListItem
dimana kita telah mendeklarasikan variabel penampung nilai yang akan ditampilkan di View.
fungsi setter dan getter seperti pada kelas Java untuk mengambil nilai yang ditampung
kelas ContohListItem.
init {
this.txtNama = row?.findViewById<TextView>(R.id.txt_Nama)
this.txtStatus = row?.findViewById<TextView>(R.id.txt_Status)
Pada baris kodingan diatas,
this.txtPanggilan kita membuat sebuah ViewHolder, yakni sebuah
= row?.findViewById<TextView>(R.id.txt_Panggilan)
}
pola
} desain yang digunakan untuk menampung View dari sebuah aplikasi Android,
fungsinya adalah untuk mempercepat rendering/ pemberian nilai pada View. Pada contoh
diatas, kita membuat ViewHolder untuk rendering nilai pada View txt_Nama, txt_Status dan
txt_Panggilan.
Baris kodingan diatas merupakan fungsi override dari kelas BaseAdapter yang telah
dijelaskan sebelumnya dalam tabel. Kita akan melakukan pengaturan pada masing-masing
fungsi seperti fungsi getItem() yang akan mendapatkan objek data masing-masing baris di
ListView, fungsi getItemId() untuk mendapatykan id dari objek yang dipilih dimana nilai
id yang berupa String akan di konversikan ke nilai angka bertipe Long, fungsi getCount()
untuk mengembalikan jumlah total baris yang ada di Listview.
Terakhir ada fungsi getView() untuk mengembalikan View dalam satu baris dari
ListView. Untuk fungsi getView(), kita akan menambahkan parameter position: Int untuk
menampung posisi Item yang dipilih di ListView nantinya, penggunaannya terdapat pada
baris:
if (convertView == null) {
val inflater =
activity?.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as
LayoutInflater
view = inflater.inflate(R.layout.list_row, null)
viewHolder = ViewHolder(view)
view?.tag = viewHolder
} else {
view = convertView
viewHolder = view.tag as ViewHolder
}
Parameter terakhir adalah parent: ViewGroup untuk melakukan override kelas ViewGroup.
package com.example.aplikasikontrol
import android.app.Activity
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView
init {
this.txtNama = row?.findViewById<TextView>(R.id.txt_Nama)
this.txtStatus = row?.findViewById<TextView>(R.id.txt_Status)
this.txtPanggilan = row?.findViewById<TextView>(R.id.txt_Panggilan)
}
}
Terakhir, buatlah sebuah kelas Activity baru yang akan memanggil masing-
masing kelas beserta komponennya, yang telah dibuat pada langkah sebelumnya.
Beri nama kelas ContohListView2, lalu isikan baris kodingan berikut:
package com.example.aplikasikontrol
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.widget.AdapterView
import android.widget.ListView
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_listview.*
Pada baris kodingan diatas, kita membuat sebuah array bernama anggota yang
menampung nilai anggota terdaftar di Perpustakaan Kita. Selanjutnya pada fungsi override
onCreate(), kita membuat sebuah objek bernama adapter dari kelas
ContohCustomAdapter, dimana nilai yang akan diolah oleh kelas ContohCustomAdapter
berasaldari nilai yang dimasukkan pada fungsi getDataAnggota() yang selanjutnya akan
ditampung oleh objek listView untuk ditampilkan ke lv_anggota.
Pada saat salah satu baris dari daftar ListView diklik oleh pengguna, maka akan
muncul sebuah pesan singkat yang kita atur menggunakan Toast, pesan ini berisikan nomor
urut anggota dan nama anggota.
Agar pemberian nilai sesuai dengan yang diharapkan, kita melakukan perulangan
untuk memberikan nilai ke variabel di kelas ContohListItem sebanyak data yang ada di array
anggota. Selanjutnya kita membuat sebuah variabel objek bernama agt dari kelas
ContohListItem lalu memberikan nilai pada variabel objek tersebut sebagai parameter yang
akan diangkut ke kelas ContohListItem, parameternya antara lain berisikan Nama Anggota,
Status Anggota dan Panggilan Anggota.
Terakhir, setelah nilai diberikan, kita akan melakukan binding data kedalam sebuah
variabel objek bernama hasil yang juga merupakan variabel objek dari ArrayList generic dari
kelas ContohListItem. Proses binding ini dilakukan pada baris program hasil.add(agt).
2.1.6 GridView
Secara umum, adapater akan menarik data dari sumber data seperti sebuah array
atau database lalu mengkonversinya kedalam sebuah result view untuk diletakkan kedalam
view.
a. Membuat GridView
Buatlah sebuah layout XML baru dengan nama activity_gridview, lalu isikan baris
koding berikut.
Berikutnya kita akan membuat sebuah kelas yang akan berlaku seperti halnya
sebuah kelas Model untuk menampung fungsi setter dan getter, nama kelas Activity
ini kita beri ContohItemFoto.java, berikut baris kodingannya.
package com.example.aplikasikontrol
class ContohItemFoto {
var judul : String? = null
var penulis : String? = null
var desc : String? = null
var foto: Int? =null
}
package com.example.aplikasikontrol
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.ImageView
import android.widget.TextView
init {
this.lblJudul = row?.findViewById<TextView>(R.id.lbl_Judul)
this.lblPenulis = row?.findViewById<TextView>(R.id.lbl_Penulis)
this.imgCover = row?.findViewById<ImageView>(R.id.img_Cover)
}
}
override fun getView(position: Int, convertView: View?, parent:
ViewGroup?): View {
val view: View
this.context = context
val image = this.items[position]
val viewHolder: ViewHolder
if (convertView == null) {
val inflater =
activity?.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
view = inflater.inflate(R.layout.activity_listbuku, null)
viewHolder = ViewHolder(view)
view.tag = viewHolder
} else {
view = convertView
viewHolder = view.tag as ViewHolder
}
var buku = items[position]
viewHolder.lblJudul?.text = buku.judul
viewHolder.lblPenulis?.text = buku.penulis
viewHolder.imgCover?.setImageResource(buku.foto!!)
Pada kasus diatas, imgCover adalah sebuah variabel bertipe ImageView yang
menjadi variabel dari kontrol ImageView img_Cover. Untuk nilai yang ditampilkan dalam
kontrol ini adalah nilai dari objek buku yang merujuk pada variabel foto, terlihat pada bagian
buku.foto!!, yang artinya kita menggunakan fungsi getter pada program Java umumnya.
Tanda “!!” adalah sebuah tanda untuk memastikan nilai tidaklah kosong.
Selanjutnya, kita akan membuat sebuah layout XML baru yang akan menjadi
komponen isi dalam GridvView yang kita buat sebelumnya, untuk itu buatlah sebuah layout
XML dengan nama activity_listbuku.xml lalu isikan baris koding berikut.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:background="#b2dbb2"
android:padding="10dp">
<ImageView
android:layout_width="80dp"
android:layout_height="120dp"
android:id="@+id/img_Cover"
android:layout_centerHorizontal="true"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/rl_content"
android:layout_below="@+id/img_Cover">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lbl_Judul"
android:textStyle="bold|italic"
android:textSize="18sp"
android:layout_centerHorizontal="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lbl_Penulis"
android:textStyle="bold"
android:layout_below="@+id/lbl_Judul"
android:layout_centerHorizontal="true"/>
</RelativeLayout>
</RelativeLayout>
Kelas Activity utama yang akan kita buat adalah ContohGridView, lalu isikan baris
koding berikut.
package com.example.aplikasikontrol
import android.content.Intent
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_gridview.*
buku = ContohItemFoto()
buku.judul = "Python for Baby"
buku.penulis = "Tyo"
buku.foto = R.drawable.python
buku.desc = ""
result.add(buku)
buku = ContohItemFoto()
Pada baris = koding
buku.judul "Androiddiatas,
Kotlin" penjelasannya juga sama dengan layout
buku.penulis = "Toma"
sebelumnya, yang =berbeda
buku.foto disini terletak pada baris:
R.drawable.kotlin
buku.desc = ""
gv_Buku.setOnItemClickListener
result.add(buku) { _, _, i, _ ->
val intent: Intent = Intent(applicationContext,
buku = ContohItemFoto()
ContohFullFoto::class.java)
buku.judul = "IoT and IndustrylistBuku.get(i).foto)
intent.putExtra("image", 4.0"
buku.penulis = "Mhd. Khalif"
intent.putExtra("judul", listBuku.get(i).judul)
buku.foto = R.drawable.iot
intent.putExtra("penulis",
buku.desc = "" listBuku.get(i).penulis)
intent.putExtra("desc",
result.add(buku) listBuku.get(i).desc)
startActivity(intent)
}
return result
Program Internet-based System Automation 35
}
}CEP-CCIT FTUI
Mobile Application on Android Platform
buku = ContohItemFoto()
buku.judul = "UI UX for E-Learning"
buku.penulis = "Afril"
buku.foto = R.drawable.uiux
buku.desc = ""
result.add(buku)
buku = ContohItemFoto()
buku.judul = "Robot Petak"
buku.penulis = "Toma"
buku.foto = R.drawable.robot
buku.desc = ""
result.add(buku)
return result
}
}
Pada bagian koding diatas, kita membuat sebuah fungsi yang akan membaca aksi
dari pengguna berupa sentuhan atau klik di GridView yang telah dibuat. Fungsi
setOnItemClickListener adalah fungsi yang membaca aksi pengguna saat meng klik salah
satu item yang muncul di GridView.
Parameter Keterangan
parent AdapterView: The AdapterView where the click happened.
view View: The view within the AdapterView that was clicked (this
will be a view provided by the adapter)
position int: The position of the view in the adapter.
id long: The row id of the item that was clicked.
Selain itu, yang berbeda berikutnya adalah cara kita mengatur nilai masing-masing
variabel yanga da di kelas Activity ContohItemFoto.java, yang mana pada contoh
sebelumnya kita menggunakan fungsi adapter = ContohCustomAdapter(this,
getDataAnggota()), untuk memproses pemberian nilai disebuah fungsi bernama
getDataAnggota(). Fungsi tersebut akan melakukan perulangan untuk mengambuil nilai
array anggota yang telah kita deklarasikan sebelumnya.
Kali ini, kita tidak menggunakan array, kita langsung memberikan nilai masing-
masing atribut/ variabel didalam fungsi yang bernama generateDataBuku(), seperti
berikut:
buku = ContohItemFoto()
buku.judul = "IoT and Industry 4.0"
buku.penulis = "Mhd. Khalif"
buku.foto = R.drawable.iot
buku.desc = ""
result.add(buku)
buku = ContohItemFoto()
buku.judul = "UI UX for E-Learning"
buku.penulis = "Afril"
buku.foto = R.drawable.uiux
buku.desc = ""
result.add(buku)
return result
Pada bagian baris koding diatas, kita membuat sebuah variabel objek bernama result
yang bertipe data ArrayList generic dengan merujuk pada data di kelas ContohItemBuku.
Objek ini akan menampung data yang kita atur berikutnya untuk dikirim ke kelas
ContohItemFoto untuk proses selanjutnya melalui kelas adapter.
Sedangkan variabel buku, kita gunakan untuk mengatur nilai yang akan di tampung
variabel result, variabel ini akan memanggil masing-masing variabel yang ada di kelas
ContohItemBuku satu-persatu sesuai kebutuhan, untuk diberikan nilai. Selanjutnya,
variabel buku akan diproses kelas adapter untuk di assign ke masing-masing variabel di
kelas ContohItemBuku melalui objek result dengan fungsi result.add(buku).
Untuk membaca foto, silahkan masukkan foto kedalam folder drawable lalu panggil
menggunakan fungsi R.drawable.<nama_foto_di_drawable_folder>.
Notes: untuk memunculkan gambar cover buku, silahkan isikan gambar di folder drawabel dalam
path /res
Berikutya kita akan membuat GridView yang tampil lebih interaktif, saat sebuah buku
di klik oleh pengguna, kita akan menampilkan detail deskripsi dari buku, untuk itu kita perlu
membuat sebuah GridView baru yang akan menampung komponen tunggal dari buku yang
dipilih pengguna, lengkap dengan komponen lain seperti judul, penulis serta deskripsi buku.
Buatlah sebuah file layout XML baru dengan nama activity_detailbuku, lalu isikan
baris kodingan berikut.
Agar detail buku bisa tampil sesuai dengan yang diharapkan, kita akan
membuat sebuah kelas Activity baru yang akan memproses data buku yang dipilih
oleh pengguna agar ditampilkan dalam layout_detailbuku.xml, untuk itu buatlah
sebuah kelas Activity baru dengan nama ContohDetailBuku.java dengan isi
kodingan sebagai berikut.
package com.example.aplikasikontrol
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_detailbuku.*
2.1.7 WebView
Terakhir, kita akan membahas WebView, yakni sebuah extention dari View yang
digunakan untuk menampilkan halaman HTML static atau melakukan remote halaman web
dengan URL di aplikasi Android.
Secara umum, WebView di Android akan berlaku sebagai browser yang tertanam
untuk menampilkan halaman web di layout activity dan tidak memiliki fitur-fitur normal
yang ada pada sebuah browser seperti address bar, kontrol navigasi, dll.
Buatlah sebuah layout XML baru dengan nama activity_webview.xml, isikan baris
koding berikut.
<?xml version="1.0" encoding="utf-8"?>
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
Berikutnya buatlah sebuah kelas Activity baru dengan nama ContohWebView lalu
isikan baris koding berikut.
Kita akan menggunakan atribut LoadURL untuk melakukan remote terhadap konten
URL melalui aplikasi Android.
Buatlah kelas Activity baru dengan nama ContohWebViewURL, isikan baris koding
berikut.
class ContohWebViewURL : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_webview)
wv_URLCCIT.settings.javaScriptEnabled = true
wv_URLCCIT.loadUrl("https://ccit.eng.ui.ac.id/")
}
}
yag ada di Web URL yang akan kita panggil. Setelahnya masukkan dalam fungsi loadUrl
alamat URL yang akan ditampilkan.
Latihan:
BAB 3
Android Control UI
Tujuan khusus :
Siswa dapat :
Berikut beberapa kontrol UI yang biasa digunakan saat membangun aplikasi Android:
3.1.1 TextView
Kita bisa membuat TextView dengan dua cara, bisa melalui file XML atau terprogram
di activity. Dalam modul ini, kita akan mempelajari membuat kontrol UI yang dibahas
dalam kedua cara ini.
Sedikit berbeda dengan bahasa Java yang biasa digunakan untuk membangun
sebuah aplikasi Android, dengan bahasa Kotlin kita bisa menggunakan perintah
textView.text = “Isi Text Disini” untuk mengatur tulisan yang ditampilkan oleh
sebuah TextView tepat setelah baris perintah setContentView, sehingga baris kode
yang kita gunakan adalah txt_Welome.text = “Welcome to CCIT FTUI”.
Pada bahasa Java, kita perlu melakukan deklarasi objek TextView terlebih dahulu
dengan baris kode TextView tv = (TextView)findViewById(R.id.txt_Welcome);
lalu diikuti dengan fungsi setText() untuk mengisi tulisan di TextView, sehingga
baris kodenya adalah tv.setText(“Welcome to CCIT FTUI”);
Sekarang kita akan membuat sebuah tampilan lengkap dari kontrol TextView
Android. Buatlah sebuah project baru dengan nama ContohTextView.
android:layout_height="match_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:orientation="vertical"
android:padding="10dp">
<TextView
android:id="@+id/txt_Welcome"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="Welcome to CCIT FTUI"
android:textColor="#86AD33"
android:textSize="20dp"
android:textStyle="bold" />
<TextView
android:id="@+id/txt_Dipanggil"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="15dp"
android:textAllCaps="true" />
<TextView
android:id="@+id/txt_Web"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:autoLink="email|web"
android:text="Kunjungi https://ccit.eng.ui.ac.id/ untuk melihat
layanan program kami" />
</LinearLayout>
</android.support.constraint.ConstraintLayout>
Setelah mengisikan baris koding diatas ke file layout XML, selanjutnya buatlah beri
nilai txt_Dipanggil melalui Activity di kelas ContohTextView seperti berikut:
<activity android:name=".ContohTextView">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
Jika koding anda benar, maka akan muncul tampilan seperti berikut:
Dapat dilihat bahwa aplikasi yang dibuat menampilkan beberapa TextView, yang
mana TextView Welcome to CCIT FTUI dibaris kedua merupakan TextView yang kita
panggil melalui activity ContohTextView.
Attribute Description
Attribute Description
Attribute Description
3.1.2 EditText
Sebagai contoh, jika kita menerima text plain, maka kita bisa mengatur spesifikasi
inputType sebagai “text”, untuk tipe password, kita bisa menggunakan inputType
“textPassword”. Kontrol EditText sendiri merupakan versi turunan dari kontrol
TextView dengan fitur tambahan dan berfungsi untuk menerima masukan
pengguna.
Sama seperti sebelumnya, kita akan mempelajari cara membuat kontrol EditText
dengan dua cara, yakni melalui file layout XML dan di kelas Activity.
Pertama buatlah sebuah kelas baru bernama ContohEditText dengan bahasa Kotlin
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/edt_Nama"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Subject"
android:inputType="text"/>
<TextView
android:id="@+id/txt_Tampil"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:textColor="#86AD33"
android:textSize="20dp"
android:textStyle="bold" />
</LinearLayout>
</android.support.constraint.ConstraintLayout>
Berikutnya kita akan membuat kontrol EditText melalui kelas Activity, berikut baris
programnya.
class ContohEditText : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_edittext)
edt_Nama.hint="Masukkan Nama Anda"
}
}
Langkah selanjutnya, kita akan mengambil isian teks yang dimasukkan pengguna di
kontrol EditText yang telah kita buat sebelumnya, tambahkan baris program Activity
seperti baris koding berikut:
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
txt_Tampil.setText("Teks di EditText adalah : "+s)
}
})
}
Berdasarkan kodingan yang telah kita buat sebelumnya, maka baris koding yang
perlu kita tambahkan dalam fungsi override onTextChanged adalah
txt_Tampil.setText(“Teks di EditText adalah : “+s). Sehingga, saat program dijalankan,
akan menghasilkan output sebagai berikut:
Pada hasil tampilan di atas, teks akan otomatis muncul saat EditTeks dimodifikasi.
Attribute Description
android:gravity It is used to specify how to align the text like left, right,
center, top, etc.
Attribute Description
3.1.3 AutoCompleteTextView
Daftar saran yang muncul secara umum merupakan daftar saran yang diperoleh dari
Data Adaptor, daftar saran baru akan muncul ketika penggunakan mengetikkan
jumlah minimal huruf yang telah didefinisikan di Threshold.
</android.support.constraint.ConstraintLayout>
Selanjutnya kita beralih ke kelas Activity untuk membuat daftar saran kota serta
mengatur adapter ke kontrol AutoCompleteTextView, berikut baris kodingannya:
Hal pertama yang kita lakukan adalah membuat sebuah array untuk menampung
class ContohAutoComplete : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_autocomplete)
val kota = arrayOf(
"Depok","Bogor","Jakarta","Tanggerang","Bekasi","Padang","Bandung"
)
// membuat objek array baru
val adapter = ArrayAdapter<String>(
this,
// Layout untuk menampilkan daftar saran
android.R.layout.simple_list_item_activated_1, kota
)
// Mengatur kontrol AutoComplete
ac_Kota.setAdapter(adapter)
// AutoComplete Threshold
// Mengatur minimum jumlah huruf yang harus diketikkan,
// agar daftar saran muncul
ac_Kota.threshold = 1
}
}
daftar saran nama kota yang akan ditampilkan di daftar saran nantinya. Nama
variabel array yang kita gunakan adalah kota.
Berikutnya kita atur agar kontrol AutoCompleteTextView yang telah kita buat di file
layout XML sebelumnya membaca adapter berisikan nilai array yang sebelumnya
telah dibuat dengan menggunakan fungsi setAdapter().
Terakhir, kita akan mengatur Threshold untuk menentukan jumlah minimum huruf
yang harus diketikkan pengguna agar daftar saran nama kota muncul sebagai
sebuah dropdown, untuk itu kita menggunakan fungsi threshold = <nilai>, sesuai
dengan kodingan yang telah kita buat sebelumnya, maka setting Threshold yang
kita buat adalah ac_Kota.threshold = 1, yang artinya jumlah minimum huruf yang
harus diketikkan pengguna agar daftar saran nama kota muncul adalah satu huruf.
Attribute Description
Attribute Description
3.1.4 Button
Kontrol berikutnya yang akan dibahas adalah kontrol Button atau tombol. Kontrol
Button adalah kontrol yang digunakan untuk melakukan sebuah aksi ketika
pengguna menekan tombol.
Button pada aplikasi Android akan menampung tulisan atau ikon atau keduanya dan
memunculkan sebuah aksi ketika pengguna menyentuhnya. Android memiliki tipe-
tipe Button yang berbeda sesuai dengan kebutuhan seperti ImageButton,
ToogleButton dan RadioButton.
Pada baris koding diatas, kita membuat sebuah kontrol Button dengan id
btn_Simpan dan mengatur teks Button dengan tulisan Simpan.
Berikutnya kita akan membuat sebuah perintah untuk menampilkan nama yang
diketikkan pengguna di EditText setelah pengguna menekan kontrol Button, berikut
baris kodingnya:
tidak memasukkan teks apapun, lalu menekan tombol Simpan, maka sebuah
informasi akan muncul sesuai pengaturan.
Secara umum, setiap kali pengguna menekan atau menyentuh sebuah kontrol
Button, objek Button akann menerima sebuah event on-click.
<EditText
android:id="@+id/edt_NamaDua"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Masukkan Nama"
android:inputType="text"/>
<Button
android:id="@+id/btn_SimpanDua"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Simpan"
android:onClick="simpanNama"/>
</LinearLayout>
</android.support.constraint.ConstraintLayout>
Untuk kelas Activity, kita buat sebuah fungsi bernama simpanNama(), sesuai
dengan nama fungsi yang kita denifinisikan di atribut android:onClick pada file layout XML,
berikut baris kodingnya:
Attribute Description
Attribute Description
3.1.5 ImageButton
Untuk membuat sebuah kontrol ImageButton melalui file layout XML, langkah
pertama buatlah sebuah file layout, dalam kasus ini kita gunakan nama
activity_imagebutton.xml agar seragam dengan layout-layout sebelumnya. Isikan
baris koding berikut:
Tambahkan baris koding berikut di file layout XML untuk button kedua yang akan
diberi gambar melalui activity:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout_editor_absoluteY="0dp"
tools:layout_editor_absoluteX="45dp">
<EditText
android:id="@+id/edt_Nama"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Masukkan Nama"
android:inputType="text"/>
<ImageButton
android:id="@+id/btn_Tambah"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/add_icon"/>
<ImageButton
android:id="@+id/btn_TambahDua"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</android.support.constraint.ConstraintLayout>
Ketika program dijalankan, akan muncul tampilan seperti gambar dibawah, gambar
pada kontrol ImageButton pertama kita atur melalui file layout XML, sedangkan kontrol
ImageButton kedua kita atur melalui file Activity.
Attribute Description
android:padding It is used to set the padding from left, right, top and
bottom of image button.
3.1.6 ToggleButton
Buatlah sebuah file layout XML baru, beri nama activity_tooglebutton.xml lalu
ketikkan baris koding berikut:
Tambahkan baris kodingan berikut di file layout XML yang telah dibuat sebelumnya
untuk kontrol ToogleButton kedua yang akan kita atur melalui file Activity:
Pada baris koding diatas yang baru kita tambahkan, kita membuat sebuah kontrol
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ToggleButton
android:id="@+id/tgl_Status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="100dp"
android:layout_marginTop="120dp"
android:checked="true"
android:textOff="OFF"
android:textOn="ON"/>
<ToggleButton
android:id="@+id/tgl_StatusDua"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="100dp"
android:layout_marginTop="120dp"/>
</RelativeLayout>
</android.support.constraint.ConstraintLayout>
ToogleButton yang baru dimana nilai teks untuk status OFF maupun OFF serta
bawaan status kontrol ToogleButton tidak kita atur melalui file layout XML.
Berikut adalah hasil tampilan saat program dijalankan, janagn lupa untuk
mendefinisikan kelas ContohToogleButton di AndroidManfiest.xml.
Pada hasil tampilan program diatas, kita bisa melihat dua buah kontrol
ToogleButton, yang mana kontrol ToogleButton yang pertama kita atur melalui
file layout XML, sedangkan kontrol ToogleButton yang kedua kita atur melalui file
Activity ContohToogleButton.
Sama halnya dengan kontrol Button, ketika pengguna melakukan aksi klik atau
sentuh pada kontrol ToogleButton, akan muncul sebuah aksi yang telah diatur di
kelas Activity. Berikut contoh respon dari kontrol ToogleButton untuk aksi dari
pengguna:
Pada baris program diatas, kita menambahkan baris kondisi untuk merespon aksi
dari pengguna terhadap masing-masing kontrol ToogleButton yang telah dibuat
sebelumnya. Fungsi setOnCheckedChangeListener akan mengecek sebuah kontrol
ToogleButton ketika mengalami perubahan status akibat aksi dari pengguna. Fungsi
ini kemudian akan menentukan respon ketika kondisi terpenuhi (true) yakni pada
bagian if (isChecked), diikuti dengan respon untuk kondisi tidak terpenuhi (false).
Berikut hasil tampilan program ketika dijalankan dan pengguna menekan kontrol
ToogleButton yang telah dibuat:
Attribute Description
Attribute Description
3.1.7 CheckBox
Kontrol CheckBox adalah kontrol dengan status antara ON atau OFF, kita bisa
menggunakan banyak kontrol CheckBox pada aplikasi Android untuk mengizinkan
pengguna memilih satu atau lebih pilihan dari sekumpulan nilai yang ditawarkan.
Sama halnya dengan kontrol ToogleButton, status bawaan dari kontrol CheckBox
adalah OFF, untuk merubah status bawaan tersebut kita bisa memanfaatkan atribut
android:checked = “true” untuk kasus mengatur status bawaan kontrol CheckBox
ON pada layout XML.
Buatlah sebuah layout XML baru dengan nama activity_checkbox.xml lalu isikan
baris koding berikut:
Lakukan sedikit modifikasi dengan pada file layout XML yang telah dibuat dengan
menambahkan dua buah kontrol ToogleButton seperti berikut:
Pada baris koding diatas, kita menmbahkan dua buah kontrol CheckBox dengan id
cb_Phyton dan cb_Web, yang mana kedua kontrol CheckBox ini tidak kita atur
status bawaannya maupun teks yang muncul sebagai labelnya.
Untuk mengatur status bawaan dan teks kedua kontrol CheckBox tersebut, kita akan
melakukan modifikasi pada file Activity yang telah kita buat sebelumnya, berikut
kodingannya:
cb_Web.setText("WEB")
}
}
Pada baris koding diatas, dapat dilihat bahwa kita mengatur nilai teks untuk
cb_Phython dengan tulisan Phyton, kita menggunakan fungsi
cb_Phyton.setText(“Phyton”), hal yang sama kita lakukan untuk cb_Web. Selain
itu, kita juga mengatur status bawaan kontrol CheckBox Phyton menjadi true dengan
fungsi cb_Phytone.isChecked = true, sedangkan untuk cb_Web tidak kita atur
untuk status bawaannya, sehingga hasil tampilan program setelah dijalankan adalah
sebagai berikut:
Terlihat pada hasil tampilan program setelah dijalankan, untuk kontrol CheckBox
Java dan Python sudah dalam keadaan tercentang atau ON, sedangkan kontrol
CheckBox Web tidak tercentang.
<CheckBox
android:id="@+id/cb_Web"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="fungsiCheckBoxWeb" />
Pada file Activity di kelas ContohCheckBox, buatlah sebuah fungsi dengan nama
yang sama seperti yang dideklarasikan di file layout XML, berikut bentuk fungsinya:
cb_Web.setText("WEB")
}
public fun fungsiCheckBoxWeb(view: View){
Toast.makeText(applicationContext, "Anda Memilih
WEB", Toast.LENGTH_SHORT).show()
}
}
Berikut hasil tampilan dari program setelah dijalankan dan setelah pengguna
melakukan sebuah aksi pada kontrol CheckBox seperti menekan atau
menyentuhnya.
Kita juga bisa mengimplementasikan fungsi yang sama untuk seluruh kontrol
CheckBox yang kita buat di file layout XML. Hal yang perlu dilakukan adalah dengan
menambahkan kondisi di dalam fungsi yang telah di deklarasikan sebelumnya. Agar nama
fungsi sesuai, ganti nama fungsi yang ada di file layout XML pada atribut android:onClick
dari fungsiCheckBoxWeb menjadi fungsiCheckBox. Atur semua kontrol CheckBox di file
layout XML untuk memiliki atribut android:onClick dengan isi fungsi yang sama, yakni
fungsiCheckBox, seperti berikut:
<CheckBox
android:id="@+id/cb_Java"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="Java"
android:onClick="fungsiCheckBox" />
<CheckBox
android:id="@+id/cb_Phyton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="fungsiCheckBox" />
<CheckBox
android:id="@+id/cb_Web"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="fungsiCheckBox" />
cb_Web.setText("WEB")
}
public fun fungsiCheckBox(view: View){
when(view.id){
R.id.cb_Java ->
Toast.makeText(applicationContext, "Anda Memilih Java",
Toast.LENGTH_SHORT).show()
R.id.cb_Phyton ->
Toast.makeText(applicationContext, "Anda Memilih Phyton",
Toast.LENGTH_SHORT).show()
R.id.cb_Web ->
Toast.makeText(applicationContext, "Anda Memilih WEB",
Toast.LENGTH_SHORT).show()
}
}
}
Attribute Description
Attribute Description
android:padding It is used to set the padding from left, right, top and
bottom.
Selain itu, jika pada kontrol CheckBox pengguna bisa melakukan checked dan
unchecked, berbeda halnya pada kontrol RadioButton yang mana pengguna tidak
bisa melakukan unchecked pada kontrol RadioButton yang telah di pilih (checked),
dalam artian pengguna hanya bisa merubah status kontrol tersebut menjadi
unchecked dengan memilih pilihan lain untuk di pilih.
kelompok, hal ini bertujuan untuk memastikan bahwa pengguna hanya bisa memilih
salah satu pilihan dari sebuah kelompok pilihan.
Secara bawaan, kontrol RadioButton akan diatur OFF (unchecked), untuk merubah
status bawaan ini kita bisa menggunakan atribut android:checked = “true”.
Buatlah sebuah file layout XML baru di projek sebelumnya, beri nama
activity_radiobutton.xml, isikan kodingan berikut:
Pada baris program diatas, kita menempatkan kontrol RadioButton didalam sebuah
RadioGroup dengan id rg_JenisKelamin. Untuk masing-masing kontrol
RadioButton kita beri id sesuai kebutuhan.
Modifikasi file layout XML yang telah dibuat sebelumnya, tambahkan baris koding
berikut:
Pada baris koding diatas, kita mengatur rd_Pria menjadi checked dengan
menggunakan atribut android:checked=”true” pada RadioGroup Jenis Kelamin.
Sedangkan untuk RadioGroup Status Pernikahan kita atur status checked yang aktif
saat program dijalankan melalui file Activity termasuk mengatur teks yang muncul
di kontrol RadioButton kelompok Status Pernikahan. Berikut kodingannya:
rd_Menikah.isChecked = true
}
}
Sehingga saat program dijalankan, akan muncul tampilan seperti gambar dibawah
ini:
Pada baris koding diatas, kita membuat sebuah fungsi bernama fungsiRBJK untuk
merespon pilihan pengguna untuk kelompok kontrol Radiobutton Jenis Kelamin. Kita
juga membuat fungsi bernama fungsiRBS untuk merespon pilihan pengguna pada
kelompok kontrol RadioButton Status Pernikahan.
Berikut kodingan untuk fungsi fungsiRBJK dan fungsi fungsiRBS pada kelas Activity
ContohRadioButton:
Pada baris koding diatas, kita bisa melihat di masing-masing fungsi kita melakukan
pengecekan dengan parameter id dari masing-masing kelompok RadioButton untuk
memberikan respon yang berbeda sesuai dengan pilihan aksi pengguna.
Selain model respon seperti kodingan diatas, kita juga bisa memanfaatkan satu nama
fungsi saja, dengan merubah semua nilai atribut android:onClick yang ada di file
layout XML activity_radiobutton.xml dengan nama fungsi yang sama, semisal
fungsiRB. Lalu, pada fungsiRB kita lakukan pengecekkan untuk id RadioGroup terlebih
dahulu, baru melakukan sub-pengecekkan didalam pengecekan id RadioGroup.
Attribute Description
Attribute Description
android:padding It is used to set the padding from left, right, top and
bottom.
3.1.9 ProgressBar
Secara bawaan, kontrol ProgressBar akan ditampilkan dalam bentuk roda berputar
(spinning wheel), namun kita bisa merubah bentuk tampilan kontrol ProgressBar
dalam bentuk garis horizontal dengan cara merubah style property ke horizontal
dengan bentuk: style=”?android:attr/progressBarStyleHorizontal”.
Buatlah sebuah file layout XML bernama activity_progressbar.xml, lalu isikan baris
koding berikut:
Pada baris koding diatas, kita membuat sebuah kontrol ProgressBar dengan
mangatur stylenya sebagai
style=”?android:attr/progressBarStyleHorizontal”.
Secara umum, kita menggunakan mode progres Determinate ketika kia ingin
menampilkan jumlah progres yang berjalan, contohnya adalah persentasi dari
progres download sebuah file, jumlah record yang disimpan ke database, dll.
Untuk menggunakan progres mode Determinate, kita perlu menagtur style dari
kontrol ProgressBar ke Widget_ProgressBar_Horizontal atau
progressBarStyleHorizontal serta mengatur jumlah progres menggunakan atribut
android:progress.
<ProgressBar
android:id="@+id/pb_Proses"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="50dp"
android:minWidth="250dp"
android:max="100"
android:progress="50" />
<ProgressBar
android:id="@+id/pb_Proses"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="50dp"
android:minWidth="250dp"
android:max="100"
android:indeterminate="true"
android:progress="50" />
Attribute Description
android:padding It is used to set the padding for left, right, top or bottom
of progress bar.
3.1.10 Spinner
Pada aplikasi Android, Spinner adalah sebuah view yang mengizinkan seorang
pengguna untuk memilih sebuah nilai dari daftar nilai. Spinner di aplikasi Android
bertindak seperti sebuah dropdown list di bahasa pemrograman lain.
Secara umum, kontrol Spinner akan menyediakan sebuah cara yang cepat untuk
memilih satu item dari daftar nilai dan akan menampilkan sebuah menu dropdown
yang akan memunculkan kumpulan nilai ketika pengguna meng-klik atau
menyentuhnya.
kontrol Spinner akan menampilkan nilai yang dipilih saat ini secara default, dengan
menggunakan Adapter kita bisa menggabungkan item-item tersebut menjadi objek
Spinner. Adapter menarik daat dari sebuah sumber seperti array atau database dan
mengubah setiap item kedalam sebuah result view lalu dimasukkan kedalam daftar
pilihan.
a. Adapter Android
Adapter pada Android akan bertindak sebagai perantara antara sumber data dan
adapter views seperti ListView, GridView untuk mengisikan data kedalam view
adapter. Adapter kemudian akan menyimpan data tersebut lalu mengirimkannya
kedalam item-item di data set yang kemudian akan dibuatkan view untuk setiap item
di dalam daftar pilihan.
Buatlah sebuah file layout XML baru dengan nama activity_spinner.xml lalu ketikkan
baris koding berikut:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:orientation="vertical"
android:padding="10dp">
<Spinner android:id="@+id/sp_Semester"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</android.support.constraint.ConstraintLayout>
Untuk memberikan nilai pada kontrol Spinner yang kita buat di file Activity, kita bisa
menampilkan baris kode seperti berikut:
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
sp_Semester.setAdapter(adapter)
}
}
BAB 4
Time Widget Android
Tujuan khusus :
Siswa dapat :
4.1 TimePicker
Pada Android, TimePicker adalah sebuah widget untuk memilih waktu baik
dalam format 24 jam atau format mode AM/PM. Jika kita menggunakan TimePicker,
kita bisa memastikan pengguna memilih waktu yang valid.
Berikut adalah hasil tampilan yang muncul saat program dijalankan, dimana
waktu yang ditunjukkana dalah waktu terupdate.
Kodingan pada file layout XML diatas akan memunculkan kontrol TimePicker
dalam mode jam saat program dijalankan, seperti gambar tampilan
sebelumnye.
Attribute Description
Attribute Description
4.2 DatePicker
Terdapat dua mode DatePicker yang didukung oleh Android, yakni Calender
dan Spinner.
<DatePicker android:id="@+id/dp_Waktu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:datePickerMode="calendar" />
Mode Spinner adalah mode ketika kita ingin menampilkan tanggal dalam
format hari, bulan dan tahun secara terpisah.
<DatePicker android:id="@+id/dp_Waktu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:datePickerMode="spinner" />
Pada baris koding diatas, kita mengganti mode kalender yang kita
akan tampilkan menjadi mode spinner, untuk mencapai hal ini kita hanya
perlu menambah atribut android:datePickerMode=”spinner”.
Jika ingin menampilkan mode spinner, namun hanya untuk memilih tanggal
saja, kita bisa menambahkan atribut android:calendarViewShown=”false”
di file layout XML.
Attribute Description
4.3 SeekBar
Untuk mendefinisikan nilai dari SeekBar ini, kita bisa menggunakan atribut
android:max di file layout XML.
<SeekBar
android:id="@+id/sb_Volume"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_marginLeft="40dp"
android:layout_marginTop="200dp"
android:max="100"
android:indeterminate="false"
android:progress="0" />
Attribute Description
Attribute Description
Nilai progres pada kontrol SeekBar mencapai 100 yang artinya mencapai titik
penuh progres. Untuk mengatur nilai ini, kita bisa menggunakan atribut
android:max di file layout XML.
Attribute Description
Attribute Description
4.4 AlertDialog
Region Description
a. Fungsi-Fungsi AlertDialog
Method Description
b. Membuat AlertDialog
Berikutnya buatlah sebuah file layout XML baru dan beri nama
activity_alertdialog.xml, lalu isikan kodingan berikut:
<Button
android:id="@+id/btn_Proses"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="100dp"
android:layout_marginTop="200dp" />
Pada baris kodingan di file layout XML diatas, kita membuat sebuah kontrol
Button untuk menjalankan sebuah aksi yang implementasinya ada di kelas
Activity. Isikan baris koding berikut pada kelas Activity yang telah dibuat
sebelumnya.
Pada baris koding diatas, kita membuat sebuah fungsi onClickListener yang
akan merespon aksi klik dari pengguna terhadap kontrol Button yang telah
kita buat sebelumnya.
Selanjutnya kita menentukan tombol yang akan kita munculkan dalam dialog
pop-up yang akan muncul, dalam kasus ini kita memunculkan tiga tombol,
yakni jumlah maksimum tombol yang bisa ditampung kontrol AlertDialog.
4.5 Switch
Pada kodingan diatas, kita mengatur status bawaan dari kontrol Switch yang
dibuat menggunakan atribut android:checke=”true”, artinya kontrol Switch
yang kita buat memiliki status bawaan awal ON.
Berikutnya modifikasi file layout XML yang telah dibuat sebelumnya seperti
berikut:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Switch
android:id="@+id/sw_Pilihan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:switchMinWidth="56dp"
android:layout_marginLeft="100dp"
android:layout_marginTop="120dp"
android:text="Pilih Satu"
android:checked="true"
android:textOff="OFF"
android:textOn="ON"/>
<Switch
android:id="@+id/sw_PilihanDua"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:switchMinWidth="56dp"
android:layout_marginLeft="100dp"
android:layout_marginTop="120dp" />
</LinearLayout>
</android.support.constraint.ConstraintLayout>
sw_Pilihan.setOnCheckedChangeListener {
buttonView, isChecked -> val pesan = "Pilih Satu Berubah Status: " +
if (isChecked) "ON" else "OFF"
Toast.makeText(applicationContext, pesan, Toast.LENGTH_SHORT).show()
}
sw_PilihanDua.setOnCheckedChangeListener {
buttonView, isChecked -> val pesan = "Pilih Dua Berubah Status: " +
if (isChecked) "MENYALA" else "MATI"
Toast.makeText(applicationContext, pesan, Toast.LENGTH_SHORT).show()
}
}
}
Attribute Description
Attribute Description
4.6 RatingBar
Kontrol terakhir yang akan kita bahas adalah RatingBar. Kontrol ini digunakan
untuk mendapatkan peringkat dari pengguna. RatingBar merupakan ekstensi dari
kontrol SeekBar dan ProgressBar yang menampilkan rating/ peringkat dalam bentuk
bintang dan mengizinkan pengguna untuk memberi nilai peringkat dengan cara
menyentuh atau melakukan klik pada bintang.
Attribute Description
Untuk menerima atau mendapatkan nilai dari kontrol RatingBar, kita bisa
menggunakan fungsi getNumStars() atau getRating().
Selanjutnya, ketikkan baris koding berikut di kelas Activity yang telah dibuat
untuk implementasi kedua fungsi yang telah disebutkan sebelumnya.
Attribute Description
Attribute Description
Latihan:
1. Buatlah sebuah data diri pengguna yang akan menerima masukan pengguna
berupa nama, email, alamat rumah, nomor telepon, jenis kelamin dan tanggal
lahir.
2. Tambahkan kontrol RatingBar agar pengguna bisa memberikan rating dari
pelayanan yang diterima.
3. Munculkan sebuah pesan yang menginformasikan bahwa rating yang
diberikan telah berhasil dikirimkan.
BAB 5
Basis Data
Tujuan khusus :
Siswa dapat :
BAB 4
Pengenalan Basis Data
Namun, pada REST service kita harus memiliki koneksi ke back end dan hal
tersebut menjadi sedikit merepotkan ketika nama variabel yang kita gunakan di
aplikasi android berbeda dengan nama variabel yang disediakan oleh programmer
back end. Selain nama variabel, terkadang kita juga menjumpai perbedaan dalam
pembuatan path request yang tak jarang menjadi membingungkan.
Firebase mirip dengan hosting, kita hanya perlu memilih servis yang kita
butuhkan, menghubungkan servis-servis tersebut ke aplikasi yang kita bangun
sehingga aplikasi selesai dengan sempurna. Back end di Firebase hanyalah salah satu
servis saja, Google Firebase juga menyediakan sebuah JSON seperti database yang
bisa kita gunakan untuk menyimpan dan membaca data. Berbeda dengan REST yang
menggunakan fungsi GET, POST, DELTE, dll, pada Firebase kita bisa langsung
terhubung ke database.
Firebase merupakan sebuah library yang dibangun diatas SDK Autentikasi Firebase
yang menyediakan keunggulan seperti:
Agar pengguna bisa masuk kedalam aplikasi, hal pertama yang perlu
dilakukana dalah mendapatkan kredensial autentikasi dari pengguna, baik berupa
alamat email dan password atau sebuah token Oauth dari penyedia identitas.
Berikutnya kredensial ini akan dikirim ke SDK Autentikasi Firebass dimana
selanjutnya servis backend akan melakukan verifikasi terhadap kredensial yang
dikirimkan lalu memberikan respon sukses atau gagal.
Setelah kita sukses melakukan login, kita bisa mengakses informasi terkait profil
dasar pengguna dan melakukan kontrol akses pengguna ke data yang tersimpan di
Firebase.
<TextView
android:text="Login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="16dp"
app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/textView"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:fontFamily="sans-serif"
android:textColor="@android:color/background_light"
Program Internet-based System Automation 116
android:textSize="24sp"
CEP-CCIT FTUI app:layout_constraintVertical_bias="1.0"/>
</android.support.constraint.ConstraintLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
Mobile Application on Android Platform
Pada baris koding diatas kita menggunakan layout baru untuk halaman
beranda bernama activity_beranda.xml, untuk itu buatlah sebuah layout kosong
baru dengan nama activity_beranda.xml.
Karena pada project kali ini kita menggunakan CardView, maka kita harus
memperkenalkan design di file build.gradel(Module: app) di dalam dependencies
sebagai berikut.
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:design:28.0.0'
ProgramtestImplementation
Internet-based System Automation
'junit:junit:4.12' 117
CEP-CCIT FTUI
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-
core:3.0.2'
}
Mobile Application on Android Platform
Jika muncul layar seperti berikut, pilih Create new Firebase Project lalu kilk
Connect to Firebase, tunggu hingga proses selesai.
Setelah selasi, maka tampilan akan berubah seperti berikut, dibawah tombol
Connect to Firebase akan muncul tanda centang.
Jika proses selesai, maka tampilan akan seperti berikut, terdapat tanda
centang dibawah tombol Add Firebase Authentication to your app. Artinya,
Firebase Authentication telah berhasil ditambahkan kedalam aplikasi kita.
Kita kembali ke kelas PerpusKita, kita akan lakukan modifikasi pada kelas ini.
Pada langkah sebelumnya kita melakukan autentikasi dengan alamat email dan
password static yang kita taruh di dalam kondisi di badan program.
btnLogin.setOnClickListener {
if (txt_Email.text.toString() == "" && txt_Password.text.toString()
== "") {
Toast.makeText(this, "Masukkan Email dan Password",
Toast.LENGTH_SHORT).show()
return@setOnClickListener
}else{
val mAuth = FirebaseAuth.getInstance()
mAuth.signInWithEmailAndPassword(txt_Email.text.toString(),
txt_Password.text.toString())
.addOnCompleteListener{
if (!it.isSuccessful){
Toast.makeText(this, "Login Gagal",
Toast.LENGTH_SHORT).show()
return@addOnCompleteListener
val intent = Intent (this, PerpusKita::class.java)
startActivity(intent)
}
else
Jika muncul error Unresolved letakkan
reference:"Login
Toast.makeText(this, kursor di baris yang
Sukses",
Toast.LENGTH_SHORT).show()
bewarna merah lalu tekan Alt+Enter.
val intent = Intent (this, Beranda::class.java)
startActivity(intent)
Setelah tidak }ada kesalahan dalam baris program, buka browser dan masuk
.addOnFailureListener{
kembali ke halaman https://firebase.google.com/ lalu${it.message}")
Log.d("Main", "Login Gagal: pilih Go to Console dibagian
Toast.makeText(this, "Email/Password tidak tepat",
kanan atas, maka akan muncul project yang telah kita koneksikan ke Firebase.
Toast.LENGTH_SHORT).show()
}
Pilihlah project
} yang akan kita Develop, dalam kasus ini PerpusKita.
}
}
}
Klik bagian Email/Password yang berada di posisi paling atas, akan muncul
sebuah layar pop-up baru seperti berikut.
Dibagian Toogle paling atas, ubah menjadi Enable lalu klik Save.
Klik tombol Add user untuk membuat pengguna baru agar bisa melakukan
login ke aplikasi kita.
Activity_beranda.xml
<ImageView
android:layout_width="150dp"
android:layout_height="150dp"
app:srcCompat="@drawable/logo"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/imageView"
android:layout_marginTop="36dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0.0"/>
<android.support.v7.widget.CardView
android:layout_width="300dp"
android:layout_height="50dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:cardCornerRadius="15dp"
app:cardElevation="20dp"
android:id="@+id/btnLogin"
android:clickable="true"
android:foreground="?android:attr/selectableItemBackground"
app:cardBackgroundColor="#0d6109"
android:layout_marginBottom="50dp">
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="Tambah Data Anggota"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="16dp"
app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/textView"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
Program Internet-based System Automationapp:fontFamily="sans-serif" 128
CEP-CCIT FTUI android:textColor="@android:color/background_light"
android:textSize="24sp"
app:layout_constraintVertical_bias="1.0"/>
</android.support.constraint.ConstraintLayout>
</android.support.v7.widget.CardView>
Mobile Application on Android Platform
<ImageView
android:layout_width="150dp"
android:layout_height="150dp"
app:srcCompat="@drawable/logo"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/imageView"
android:layout_marginTop="36dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0.0"/>
Program Internet-based System Automation 129
<android.support.design.widget.TextInputLayout
CEP-CCIT FTUI
android:layout_width="300dp"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
Mobile Application on Android Platform
mDatabaseReference = mDatabase.reference.child("agt")
mDatabaseReference.setValue(agt).addOnCompleteListener {
Toast.makeText(this, "Berhasil Simpan Data",
Toast.LENGTH_SHORT).show()
txt_Nama.setText("")
txt_Status.setText("")
}
Program}Internet-based System Automation 130
CEP-CCIT
} FTUI
Mobile Application on Android Platform
Pada bagian Rules, ubah nilai false menjadi true seperti berikut, agar penyimpanan
data kita adalah public, sehingga pengguna bisa melakukan simpan dan baca data.
Jalankan aplikasi, akan muncul tampilan halaman login, lakukan lagin dengan
data sebelumnya.
nama.text = agt.nama
status.text = agt.status
panggilan.text = agt.panggilan
return view
}
}
Program Internet-based System Automation 134
CEP-CCIT FTUI
Mobile Application on Android Platform
Berikutnya kita akan membuat sebuah kelas yang akan menjadi kelas
deklarasi variabel yang kita butuhkan sebagai komponen dari ListView yang
dibuat. Beri nama kelas Anggota dengan baris kodingan sebagai berikut.
class Anggota (var nama : String, var status: String, var panggilan: String) {
constructor() : this("", "", "") {
}
}
Pada langkah sebelumnya kita telah membuat sebuha tombol baru di layout
XML activity_beranda.xml yakni tombol Lihat Data Anggota. Agar tombol
memiliki aksi ketika pengguna melakukan aksi tekan, maka kita perlu
membuat sebuah kelas Activity baru yang akan melakukan proses sebagai
respon terhadap aksi pengguna. Buatlah sebuah kelas Activity baru dengan
nama TampilAnggota, lalu isikan baris kodingan berikut.
ref = FirebaseDatabase.getInstance().reference
agt = mutableListOf()
listView = findViewById(R.id.lv_Anggota)
ref.addValueEventListener(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
}
Pada baris kodingan diatas, kita membuat tiga buah variabel dengan nama
ref, agt dan listView menggunakan keyword lateinit. Keyword lateinit berfungsi
untuk mendeklarasikan sebuah variabel yang secara eksplisit bisa dikatakan bahwa
kita memberitahu sistem bahwa variabel dengan keyword ini nantinya akan diberi
nilai, dalam artian tidak akan bernilai null. Berbeda dengan deklarasi variabel biasa
yang nilainya bisa saja menjadi null.
Variabel agt kita berikan nilai mutableListOf() yang artinya elemen dalam
variabel ini bisa ditambah dan dikurangkan. Kita memanggil fungsi
addValueEventListener pada variabel ref agar sistem tetap membaca query atau
database yang kita gunakan ketika terjadi perubahan. Pada fungsi ini, kita akan
melakukan override dua buah fungsi yakni onCancelled() dan onDataChange().
Berikutnya kita akan membuat fungsi Update pada aplikasi yang telah kita
bangun. Tombol Update dan Delete (nantinya) akan kita tempatkan didalam setiap
item di ListView.
Ganti menjadi:
Tujuannya adalah agar context yang kita gunakan berikutnya adalah context
dengan life-cycle dari kelas Activity TampilAnggota, tidak lagi context secara global
seperti saat kita menggunakan applicationContext, hal ini dikarenakan ketika kita
melakukan referensi ke komponen yang ada di Activity yang sama yakni
TampilAnggota (activity lama), dan activity lama tidak bisa melakukan referensi
data gerbage collection.
Apa itu gerbage collection? Gerbage collection adalah suatu teknik untuk
mendeteksi memori yang dialokasikan ke sebuah objek secara otomatis, memori
yang dialokasikan merupakan memori yang tidak bisa digunakan lagi di program
dan mengembalikan memori yang tadi digunakan.
<ImageView
android:layout_width="150dp"
android:layout_height="150dp"
app:srcCompat="@drawable/logo"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/imageView"
android:layout_marginTop="36dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0.0"/>
<android.support.design.widget.TextInputLayout
android:layout_width="300dp"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/txtNamaUpdate"
app:layout_constraintTop_toBottomOf="@+id/imageView"
android:layout_marginTop="50dp"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
app:passwordToggleTint="#0d6109">
<android.support.design.widget.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Nama Anggota"
Program Internet-based System Automation 139
android:id="@+id/txt_NamaUpdate"
CEP-CCIT FTUI
android:textColorLink="@android:color/holo_green_dark"/>
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="300dp"
Mobile Application on Android Platform
Buatlah sebuah kelas Activity baru dengan nama UpdateAnggota lalu isikan
baris koding berikut.
class UpdateAnggota : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_updateaggota)
}
}
Referensi
PT. Sentra Vidya Utama. October 10, 2016. Pengenalan Android. Accessed from:
https://sevima.com/pengenalan-android/ tanggal: August 02, 2019
Appnimi Academy. Firebase Realtime Database and Kotlin Tutorial - Develop Cloud
Based Task List App. Diakses dari: https://appnimiacademy.com/firebase-realtime-
database-and-kotlin-tutorial-develop-cloud-based-task-list-app/ tanggal: August 15, 2019