0% menganggap dokumen ini bermanfaat (0 suara)
4 tayangan25 halaman

Panduan Lengkap Android KTX untuk Kotlin

Android KTX adalah library yang dirancang untuk meningkatkan pengembangan aplikasi Android menggunakan bahasa Kotlin dengan menyediakan ekstensi yang menyederhanakan penggunaan API Android dan Jetpack. Library ini memungkinkan penulisan kode yang lebih ringkas dan idiomatis, serta mencakup berbagai modul dan fungsi ekstensi untuk mempermudah berbagai tugas dalam pengembangan aplikasi. Pengguna dapat menambahkan Android KTX ke proyek mereka melalui konfigurasi di berkas build.gradle dan memanfaatkan berbagai fungsi yang disediakan untuk meningkatkan efisiensi pengembangan.

Diunggah oleh

Ali
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOC, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
4 tayangan25 halaman

Panduan Lengkap Android KTX untuk Kotlin

Android KTX adalah library yang dirancang untuk meningkatkan pengembangan aplikasi Android menggunakan bahasa Kotlin dengan menyediakan ekstensi yang menyederhanakan penggunaan API Android dan Jetpack. Library ini memungkinkan penulisan kode yang lebih ringkas dan idiomatis, serta mencakup berbagai modul dan fungsi ekstensi untuk mempermudah berbagai tugas dalam pengembangan aplikasi. Pengguna dapat menambahkan Android KTX ke proyek mereka melalui konfigurasi di berkas build.gradle dan memanfaatkan berbagai fungsi yang disediakan untuk meningkatkan efisiensi pengembangan.

Diunggah oleh

Ali
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOC, PDF, TXT atau baca online di Scribd

Android KTX

Catatan: Modul ini hanya diperuntukkan untuk pengguna


bahasa Kotlin. Jika Anda termasuk pengguna Java, lewati saja
materi ini karena kita tidak menggunakannya di Java.

Kita sudah mempelajari Kotlin sebagai bahasa yang digunakan


untuk membuat aplikasi Android dengan kode yang jauh lebih
ringkas dan aman. Namun ternyata tak cukup sampai di situ. Tim
Android dari Google betul-betul ingin menjadikan Kotlin
sebagai tools untuk meningkatkan percepatan proses
pengembangan aplikasi Android dengan kode yang lebih
sederhana. Pada awal tahun 2018 tim Android telah mulai
mengembangkan sebuah library baru yang mind blowing dengan
nama Android KTX [12].

Android KTX adalah sekumpulan Kotlin extensions bagian


dari Android Jetpack yang diumumkan Google pada I/O 2018.
Android KTX berguna untuk mengoptimalkan penggunaan
Jetpack & Android API pada pengembangan aplikasi Android
dengan basis bahasa Kotlin, seperti function/properties, lambdas,
named properties, default parameter dan coroutines. Android
KTX sendiri tidak menambahkan fitur baru pada Android API yang
sudah ada.

Tujuan dari Android KTX sendiri adalah untuk membuat


pengembangan aplikasi Android dengan Kotlin jauh lebih ringkas,
sederhana, dan idiomatis. Android KTX menyediakan fungsi
ekstensi untuk bekerja dengan kelas firmware Android dan
banyak lagi. Saat ini beberapa ekstensi tersebut mencakup
beberapa kelas yang paling sering digunakan di Android
seperti Views, Canvas, Animator, Database, Util, dll. Tim
Android juga menambahkan dukungan Support
Library dan Architecture Component pada Android KTX.

Untuk bisa menggunakan Android KTX, kita perlu menambahkan


konfigurasi berikut pada berkas [Link]:

1. repositories {

2. google()

3. }
Namun, jika menggunakan Android Studio versi di atas 3.x.x,
Anda tidak perlu menambahkan konfigurasi tersebut karena
secara default sudah ditambahkan saat membuat proyek baru.

Android KTX dikelompokkan berdasarkan modul. Setiap


modulnya memiliki satu atau lebih package. Jika ingin
menggunakan salah satu modul dari Android KTX, Anda perlu
menambahkan dependensi dari modul yang diinginkan pada
berkas [Link]. Sebagai contoh, jika ingin menggunakan
modul core-ktx, maka tambahkanlah dependensi berikut ini:

1. implementation '[Link]:core-ktx:1.6.0'

Modul core-ktx memiliki beberapa package yang bisa digunakan


seperti di bawah ini.

 [Link]
 [Link]
 [Link]
 [Link]
 [Link]
 [Link]
 [Link]
 [Link]
 [Link]
 [Link]
 [Link]

Sedangkan untuk daftar modul yang tersedia pada Android KTX,


silakan lihat tabel berikut:

Module (artifact) Package


[Link]:core-ktx Semua package yang ada module core-ktx

[Link]:fragment-ktx [Link]

[Link]:palette-ktx [Link]

[Link]:sqlite-ktx [Link]
Module (artifact) Package

[Link]:collection-ktx [Link]

[Link]:lifecycle-viewmodel-ktx [Link]

[Link]:lifecycle-reactivestreams-ktx [Link]

[Link]:navigation-common-ktx [Link]

[Link]:navigation-fragment-ktx [Link]

[Link]:navigation-runtime-ktx [Link]

[Link]:navigation-testing-ktx [Link]

[Link]:navigation-ui-ktx [Link]

[Link]:work-runtime-ktx [Link]

Untuk melihat modul lain yang ada dan versi terbarunya dapat
dilihat di sini:

 Extensions List

Extensions Function di Dalam


Android KTX
Android KTX menyediakan berbagai macam extensions
function yang dapat menunjukkan seberapa besar Android KTX
akan meningkatkan proses pengembangan aplikasi Android.
Berikut adalah beberapa extensions function tersebut:

 ViewModel
Apabila ingin menginisialisasi ViewModel, biasanya kita
perlu membuatnya melalui ViewModelProvider seperti ini:
1. val mainViewModel = ViewModelProvider(this,

[Link]()).get(MainViewMode

l::[Link])
Dengan Android KTX Anda bisa menuliskannya jauh lebih
singkat seperti ini:

2. private val mainViewModel: MainViewModel by viewModels()

Anda hanya membutuhkan


depedency [Link]:activity-ktx untuk di
Activity dan [Link]:fragment-ktx untuk di
Fragment.

 Fragment
Ketika kita ingin melakukan fragment
transaction seperti replace atau add, biasanya kita perlu
menuliskan kode seperti berikut:
1. supportFragmentManager

2. .beginTransaction()

3. .replace(fragmentContainer, myFragment, FRAGMENT_TAG)

4. .commitAllowingStateLoss()

Dengan Android KTX, kita bisa menuliskannya hanya


dengan kode seperti berikut ini.

5. [Link](allowStateLoss = true)

6. replace(fragmentContainer, myFragment, FRAGMENT_TAG)

7. }

Lihat berkurangnya jumlah baris dari kode yang dituliskan.


Sangat mudah dan sederhana, bukan?

 Content
Android KTX menambahkan beberapa fungsi dalam
paket Content. Sebagai contoh, ketika ingin
menggunakan System Servicebiasanya dibutuhkan kode
seperti berikut:
1. val alarmManager =

getSystemService(Context.ALARM_SERVICE) as AlarmManager

Namun dengan Android KTX, kode di atas bisa


disederhanakan menjadi:

2. val alarmManager = getSystemService<AlarmManager>()

Selanjutnya jika ingin


menggunakan ContentValues biasanya kode yang
digunakan adalah seperti berikut:

3. val contentValues = ContentValues()

4. [Link](COLUMN_USER , "dicoding")

5. [Link](COLUMN_ADDRESS , "Indonesia")

6. [Link](COLUMN_PHONE , "085777888999")

Dengan Android KTX, kode tersebut bisa dituliskan seperti


ini.

7. val contentvalues = contentValuesOf(

8. COLUMN_USER to "dicoding",

9. COLUMN_ADDRESS to "Indonesia",

10. COLUMN_PHONE to "085777888999"

11. )

 SQLite
Saat ini SQLite hanya memiliki satu ekstensi dan mungkin
akan ditambahkan ekstensi lainnya pada update Android
KTX selanjutnya. Ketika ingin
melakukan database transaction pada SQLite, kode yang
kita tuliskan adalah sebagai berikut:
1. [Link]()

2.
3. try {

4. // do some transaction

5. [Link]()

6. } finally {

7. [Link]()

8. }

Namun, dengan Android KTX, kita cukup menuliskannya


dengan kode berikut:

9. [Link] {

10. // do some transaction

11. }

 Net

Paket Net hanya memiliki satu fungsi ekstensi layaknya


SQLite, yaitu ekstensi yang memungkinkan untuk
mempermudah representasi dari sebuah String menjadi
sebuah Uri. Untuk mengubah String menjadi
sebuah Uri biasanya kita membutuhkan kode berikut:

1. val uriString = [Link](string)

Dengan Android KTX, cukup tuliskan kode seperti di bawah


ini:

2. val uriString = [Link]()

 Text
Android KTX juga menyediakan beberapa ekstensi pada
paket Text. Beberapa ekstensi tersebut tersedia dalam
sebuah class dengan nama SpannableStringBuilder. Sebagai
contoh, ketika kita ingin menerapkan beberapa style pada
sebuah teks, kita bisa
menggunakan SpannableStringBuilderseperti berikut:
1. val mySpannable = SpannableStringBuilder("Klik

[Link] untuk info lebih lanjut")

2. [Link](StyleSpan([Link]) , 5 , 22 ,

0)

3. [Link](UnderlineSpan() , 5 , 22 , 0)

4. [Link](ForegroundColorSpan([Link]) , 5 ,

22 , 0)

Dengan Android KTX, kita bisa menyederhanakan kode di


atas menjadi seperti di bawah ini:

5. val mySpannable = "Klik [Link] untuk info

lebih lanjut".toSpannable()

6. mySpannable[5..22] = ForegroundColorSpan([Link])

7. mySpannable[5..22] = UnderlineSpan()

8. mySpannable[5..22] = StyleSpan([Link])

Atau, kita bisa juga secara langsung memanfaatkan


ekstensi buildSpannedStringseperti berikut:

9. [Link] = buildSpannedString {

10. append("Klik").bold {

11. underline {

12. color([Link]) {

13. append(" [Link] ")

14. }

15. }
16. }.append("untuk info lebih lanjut")

17. }

 OS
Untuk paket OS, Android KTX juga menyediakan beberapa
fungsi ekstensi yang bisa digunakan. Salah satunya adalah
fungsi ekstensi untuk kelas Handlerseperti berikut:
1. [Link](uptimeMillis = 400) {

2. // create some magic

3. }

4.

5. [Link](delayInMillis = 400){

6. // create some magic

7. }

 Animation
Android KTX juga menyediakan beberapa fungsi ekstensi
yang memungkinkan untuk kita menerapkan animation
listener dengan sangat mudah.
1. [Link] { handlingAnimation(it) }

Selain itu, kita juga bisa menambahkan callback yang lebih


spesifik ke dalam listenertersebut.

2. [Link](

3. onStart = { },

4. onCancel = { },

5. onEnd = { },

6. onRepeat = { }
7. )

Dengan memberikan callback secara spesifik, kita bisa


mengurangi callback yang mungkin tidak diperlukan.
Android KTX memungkinkan kita untuk menambahkan jeda
pada sebuah animasi yang sedang berjalan dengan sangat
mudah. Kita bisa memanfaatkan
fungsi addPauseListener()seperti berikut ini:

8. [Link] {

9. handleAnimation(it)

10. }

11.

12. // atau

13.

14. [Link](

15. onPause = {},

16. onResume = {}

17. )

Atau, Anda juga bisa menambahkan kode ke


dalam individual event pada sebuah animasi seperti berikut:

18. [Link] { handleAnimation(it) }

19. [Link] { handleAnimation(it) }

20. [Link] { handleAnimation(it) }

21. [Link] { handleAnimation(it) }

22. [Link] { handleAnimation(it) }


23. [Link] { handleAnimation(it) }

 Transition
Sama halnya dengan Animator, Android KTX menyediakan
beberapa fungsi ekstensi untuk kelas Transition yang bisa
kita gunakan untuk mengetahui perubahan pada transisi
yang kita terapkan. Untuk melakukannya, kita cukup
memanggil fungsi addListener()seperti contoh di bawah ini.
1. [Link] {

2. handlingTransition(it)

3. }

4.

5. //atau:

6.

7. [Link](

8. onEnd = {},

9. onStart = {},

10. onCancel = {},

11. onResume = {},

12. onPause = {})

Kita juga bisa menggunakan fungsi tunggal untuk masing-


masing callback dari transisi:

13. [Link] { }

14. [Link] { }

15. [Link] { }

16. [Link] { }
17. [Link] { }

 Views

Ekstensi yang bisa digunakan pada kelas View di antaranya


adalah ketika kita ingin mengatur callback dari
sebuah layout event, kita bisa memakai beberapa fungsi
berikut:

1. [Link] { }

2. [Link] { }

3. [Link] { }

Selanjutnya untuk
fungsi postDelayed dan postOnAnimationDelayed sekarang
jadi lebih mudah jika digunakan dengan Android KTX seperti
berikut:

4. [Link](delayInMillis = 5000){

5. // do some magic

6. }

7.

8. [Link](delayInMillis = 5000){

9. // do some magic

10. }

Kemudian jika kita ingin mengatur padding pada


sebuah view, dengan Android KTX kita bisa menggunakan
beberapa fungsi seperti di bawah ini.

11. [Link](16)

12. [Link](left = 10, right = 10, top = 10,

bottom = 10)
13. [Link](start = 10, end = 10, top

= 10, bottom = 10)

Selanjutnya untuk melakukan konversi instance dari


sebuah View menjadi Bitmapkita bisa menerapkan kode
seperti berikut:

14. val bitmap = [Link](config = bitmapConfig)

Masih terdapat banyak fungsi ekstensi lainnya yang akan


tersedia pada Android KTX. Meskipun saat ini masih dalam versi
beta, tetapi kita semua bisa berkontribusi untuk membantu
Android KTX selangkah lebih dekat ke versi yang stabil.
Sehingga, kita dapat mulai menggunakan library yang sangat
menarik ini ke dalam production project. Kontribusi yang bisa kita
berikan pun bermacam-macam, seperti melaporkan masalah,
menyarankan fitur baru, dokumentasi, memperbaiki bug, dan
menambahkan atau mengganti sebuah API. Untuk lebih
lengkapnya, silakan kunjungi [Link]
ktx.

Sebagai tambahan materi, Anda juga menyaksikan 2 video di


bawah ini.

 Android Jetpack: KTX - Sweeter Kotlin Android


Development - Florina Muntenesce
 Android Jetpack: Sweetening Kotlin Development with
Android KTX (Google I/O '18) - Jake Wharton

 Android KTX: A Dash of Kotlin Makes All the Difference!


(KotlinConf 2018 ) - Dan Kim

Latihan Activity KTX dan Fragment KTX


Catatan: Modul ini hanya diperuntukkan untuk pengguna
bahasa Kotlin. Jika Anda pengguna Java, lewati saja materi ini
karena kita tidak menggunakannya di Java.

Tujuan
Pada codelab kali ini Anda akan belajar menerapkan Android KTX
pada project yang sudah Anda buat sebelumnya, yaitu
pada project latiha MySharedPreference dan MyFlexibleFrag
ment.

Alur Latihan

Berikut alur yang akan kita lakukan dalam latihan kali ini:

1. Meneruskan LiveData dengan SingleEvent.


2. Menambahkan library ke dalam project.
3. Mengubah inisialisasi ViewModel dalam kelas Activity
menggunakan Android KTX.
4. Menjalankan aplikasi.
5. Menutup project LiveData dengan SingleEvent dan
membuka project MyFlexibleFragment .
6. Menambahkan library ke dalam project.
7. Mengubah inisialisasi Fragment menggunakan Android
KTX.
8. Menjalankan aplikasi.

Codelab Activity KTX di Android

1. Bukalah proyek Latihan LiveData dengan


SingleEvent yang sudah Anda buat sebelumnya atau
silakan unduh di sini.
2. Pada codelab ini Anda akan menggunakan kode untuk
inisialisasi ViewModel yang terdapat pada library Activity-
KTX. Untuk menambahkannya,
buka [Link](module:app) dan tambahkan kode
berikut:
1. ...

2. dependencies {

3. ...
4. implementation "[Link]:activity-

ktx:1.3.1"

5. }

Setelah itu klik Sync Now untuk mengunduh library dan


sinkronisasi ke project.
3. Selanjutnya buka [Link] dan perhatikan kode
untuk inisialisasi ViewModel berikut:
1. class MainActivity : AppCompatActivity() {

2.

3. private lateinit var binding: ActivityMainBinding

4.

5. override fun onCreate(savedInstanceState: Bundle?) {

6. [Link](savedInstanceState)

7.

8. binding =

[Link](layoutInflater)

9. setContentView([Link])

10.

11. supportActionBar?.hide()

12.

13. val mainViewModel = ViewModelProvider(this,

[Link]()).get(MainViewMode

l::[Link])

14.
15. [Link](this,

{ restaurant ->

16. setRestaurantData(restaurant)

17. })

18. ...

19. }

Ubah kode tersebut menggunakan KTX sehingga menjadi


seperti ini:

20. class MainActivity : AppCompatActivity() {

21.

22. private lateinit var binding: ActivityMainBinding

23. private val mainViewModel by

viewModels<MainViewModel>()

24.

25. override fun onCreate(savedInstanceState:

Bundle?) {

26. [Link](savedInstanceState)

27.

28. binding =

[Link](layoutInflater)

29. setContentView([Link])

30.

31. supportActionBar?.hide()
32.

33. [Link](this,

{ restaurant ->

34. setRestaurantData(restaurant)

35. })

36. ...

37. }

4. Mudah, kan? Sekarang coba jalankan aplikasi untuk menguji


apakah ia tetap berjalan dengan baik atau tidak.
Secara
tampilan memang tidak ada perbedaan dengan
sebelumnya. Bedanya, sekarang kode yang digunakan
menjadi lebih sedikit dan mudah dibaca. Keren, kan?

Codelab Fragment KTX di Android

1. Bukalah proyek MyFlexibleFragment yang sudah Anda


buat sebelumnya atau silakan unduh di sini.
2. Pertama, buka berkas [Link](Module: app) dan
tambahkan baris berikut:
1. android {

2. ...

3. kotlinOptions {

4. jvmTarget = '1.8'

5. }

6. }

7.

8. dependencies {

9. ...

10. implementation "[Link]:fragment-

ktx:1.2.5"

11. }

Setelah itu klik Sync Now untuk mengunduh library dan


sinkronisasi ke project.

3. Selanjutnya buka [Link] dan perhatikan kode


berikut:
1. class MainActivity : AppCompatActivity() {

2. override fun onCreate(savedInstanceState: Bundle?) {


3. [Link](savedInstanceState)

4. setContentView([Link].activity_main)

5. ...

6. if (fragment !is HomeFragment) {

7. Log.d("MyFlexibleFragment", "Fragment Name :"

+ HomeFragment::[Link])

8. mFragmentManager

9. .beginTransaction()

10. .add([Link].frame_container,

mHomeFragment, HomeFragment::[Link])

11. .commit()

12. }

13. }

14. }

Ubah kode tersebut menggunakan Fragment KTX sehingga


menjadi seperti ini:

15. class MainActivity : AppCompatActivity() {

16. override fun onCreate(savedInstanceState: Bundle?)

17. [Link](savedInstanceState)

18. setContentView([Link].activity_main)

19. ...
20. if (fragment !is HomeFragment) {

21. Log.d("MyFlexibleFragment", "Fragment Name

:" + HomeFragment::[Link])

22. [Link] {

23. add([Link].frame_container,

mHomeFragment, HomeFragment::[Link])

24. }

25. }

26. }

27. }

4. Selanjutnya buka [Link] dan perhatikan kode


berikut:
1. class HomeFragment : Fragment(), [Link] {

2. ...

3. override fun onClick(v: View) {

4. if ([Link] == [Link].btn_category) {

5. val mCategoryFragment = CategoryFragment()

6. val mFragmentManager = fragmentManager

7. mFragmentManager?.beginTransaction()?.apply

8. replace([Link].frame_container,

mCategoryFragment,

CategoryFragment::[Link])
9. addToBackStack(null)

10. commit()

11. }

12. }

13. }

14. }

Ubah pula kode tersebut dengan menggunakan Fragment


KTX sehingga menjadi seperti ini:

15. class HomeFragment : Fragment(), [Link]

16. ...

17. override fun onClick(v: View) {

18. if ([Link] == [Link].btn_category) {

19. val mCategoryFragment = CategoryFragment()

20. val mFragmentManager =

parentFragmentManager

21. [Link] {

22. addToBackStack(null)

23. replace([Link].frame_container,

mCategoryFragment,

CategoryFragment::[Link])

24. }

25. }
26. }

27. }

5. Lakukan cara yang sama pada kode di


dalam [Link] sehingga menjadi seperti ini:
1. class CategoryFragment : Fragment(),

[Link] {

2. ...

3. override fun onClick(v: View) {

4. if ([Link] == [Link].btn_detail_category) {

5. ...

6. val mFragmentManager = parentFragmentManager

7. [Link] {

8. addToBackStack(null)

9. replace([Link].frame_container,

mDetailCategoryFragment,

DetailCategoryFragment::[Link])

10. }

11. }

12. }

13. }
Mudah, kan? Coba jalankan aplikasi untuk menguji dan
memastikan aplikasi sudah berjalan dengan baik.
Bedah Kode

Java 8

Pada saat Anda menambahkan dependency untuk KTX di


dalam [Link](module:app), Anda diminta untuk
menambahkan kode berikut:

1. android {

2. ...

3. kotlinOptions {

4. jvmTarget = JavaVersion.VERSION_1_8.toString()

5. }

6. }

Kode di atas digunakan karena KTX menggunakan fitur dari Java


8, seperti lambda expression sedangkan Android baru
mendukung Java 7. Alhasil, Anda perlu mengonfigurasinya.

Activity KTX

Lihatlah perbedaan antara dua kode berikut


pada [Link]:

 Tanpa KTX
 Dengan KTX

1. val mainViewModel = ViewModelProvider(this,

[Link]()).get(MainViewModel::cla

[Link])

Dengan bantuan KTX, Anda tak perlu lagi mengulang-ulang cara


pembuatan ViewModel menggunakan ViewModelProvider.
Sehingga, kode menjadi lebih bersih dan mudah dibaca. Anda
juga tidak perlu membuat ViewModelFactory jika ViewModel tidak
membutuhkan constructor. Lebih simpel, bukan?

Fragment KTX

Lihatlah perbedaan antara dua kode berikut


pada [Link]:

 Tanpa KTX
 Dengan KTX

1. mFragmentManager

2. .beginTransaction()

3. .add([Link].frame_container, mHomeFragment,

HomeFragment::[Link])

4. .commit()

Dengan bantuan KTX, Anda tak perlu lagi menggunakan


kata beginTransaction di setiap melakukan fragment transaction.
Jadi tidak bosan lagi deh ngoding-nya.

Selamat Anda sudah belajar mengimplementasikan KTX


pada project Anda sebelumnya. KTX ini dibuat karena fungsi-
fungsi pada Android sudah cukup tua. Dengan hadirnya Kotlin,
banyak kode yang bisa diringkas dengan pendekatan baru. Kode
pun menjadi lebih simpel dan mudah dibaca. Hidup Anda
sebagai developer pun jadi lebih mudah. Cheers!

Source code dapat Anda unduh di:

 Source Code Android KTX

Anda mungkin juga menyukai