0% menganggap dokumen ini bermanfaat (0 suara)
13 tayangan20 halaman

Android

data

Diunggah oleh

rickosamosir93
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 PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
13 tayangan20 halaman

Android

data

Diunggah oleh

rickosamosir93
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 PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 20

Teori Intent

Intent adalah mekanisme untuk melakukan sebuah action dan


komunikasi antar komponen aplikasi misal Activity, Service, dan
Broadcast Receiver. Ada tiga penggunaan umum intent dalam aplikasi
Android yaitu sebagai berikut.

• Memindahkan satu activity ke activity lain dengan atau tidak


membawa data.
• Menjalankan background service, misalnya melakukan sinkronisasi
ke server dan menjalankan proses berulang (periodic/schedulertask).
• Mengirimkan obyek broadcast ke aplikasi yang membutuhkan.
Misal, ketika aplikasi membutuhkan proses menjalankan sebuah
background service setiap kali aplikasi selesai melakukan booting.
Aplikasi harus bisa menerima obyek broadcast yang dikirimkan oleh
sistem Android untuk eventbooting tersebut.

Intent memiliki dua bentuk yaitu:

1. Explicit Intent
Adalah tipe Intent yang digunakan untuk menjalankan komponen
lain dengan tujuan yang sudah jelas atau eksplisit. Umumnya Intent
ini digunakan untuk berpindah ke Activity lain pada satu aplikasi.
Misalnya, dari MainActivity menuju ke DetailActivity.
Explicit intent bekerja dengan memanfaatkan context dari Activity asal
dan nama Activity yang dituju. Berikut adalah contoh kode dari gambaran
Explicit Intent di atas:

1. val moveIntent = Intent(this@MainActivity, DetailActivity::class

.java)

2. startActivity(moveIntent)

Dengan memanggil fungsi startActivity berisi Intent, aplikasi akan


langsung membuka Activity tersebut tanpa memberikan opsi lain.

Implicit Intent

Adalah tipe intent yang tidak memerlukan detail nama kelas yang ingin
diaktifkan. Model ini memungkinkan komponen dari aplikasi lain bisa
merespon request intent yang dijalankan.

Penggunaan tipe Intent ini umumnya diperuntukkan untuk menjalankan


fitur/fungsi dari komponen aplikasi lain. Contohnya ketika kita
membutuhkan fitur untuk mengambil foto. Daripada membuat sendiri
fungsi kamera, lebih baik kita menyerahkan proses tersebut pada aplikasi
kamera bawaan dari peranti atau aplikasi kamera lain yang telah terinstal
sebelumnya di peranti.

Hal yang sama misalnya ketika kita membutuhkan fungsi berbagi konten.
Kita bisa memanfaatkan intent untuk menampilkan aplikasi mana saja
yang bisa menangani fitur tersebut.

Implementasi implicit intent ini akan sangat memudahkan bagi


pengembang agar tetap fokus pada proses bisnis inti dari aplikasi yang
dikembangkan.

Lalu, mengapa disebut Implicit Intent? Hal ini karena tujuannya masih
belum jelas (implicit), misalnya Anda ingin membuka gallery. Maka
pilihannya yaitu Anda bisa menggunakan default gallery atau
menggunakan Google Photos. Jika ada aplikasi lainnya yang bisa
menangani aksi ini, aplikasi itu pun akan muncul.
Berikut adalah contoh kode dari gambaran Implicit Intent di atas.

1. private val launcherIntentGallery = registerForActivityResult(


2. ActivityResultContracts.StartActivityForResult()
3. ) { result ->
4.
5. }
6.
7. val intent = Intent(Intent.ACTION_GET_CONTENT)
8. intent.type = "image/*"
9. launcherIntentGallery.launch(Intent.createChooser(intent,
"Choose a Picture"))

Latihan Explicit Intent

kita akan membangun antarmuka (interface) seperti ini.

activity_main.xml menjadi seperti ini

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


2. <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
3. xmlns:tools="http://schemas.android.com/tools"
4. android:layout_width="match_parent"
5. android:layout_height="match_parent"
6. android:orientation="vertical"
7. android:padding="16dp">
8.
9. <Button
10. android:id="@+id/btn_move_activity"
11. android:layout_width="match_parent"
12. android:layout_height="wrap_content"
13. android:layout_marginBottom="16dp"
14. android:text="@string/move_activity" />
15. </LinearLayout>

Tambahkan juga resource string-nya. Tambahkan semua string yang akan


digunakan di project ini. Buka berkas strings.xml dan tambahkan kode
berikut ini.

1.

1. <resources>

2. <string name="app_name">MyIntentApp</string>

3. <string name="move_activity">Pindah Activity</string>

4. <string name="move_with_data">Pindah Activity dengan Da

ta</string>

5. <string name="move_with_object">Pindah Activity dengan

Object</string>

6. <string name="dial_number">Dial a Number</string>

7. <string name="move_with_result">Pindah Activity untuk R

esult</string>

8. <string name="result_from_activity">Hasil dari Activity

</string>

9. <string name="choose_number">Pilih angka yang kamu suka

</string>

10. <string name="_50">50</string>


11. <string name="_100">100</string>

12. <string name="_150">150</string>

13. <string name="_200">200</string>

14. <string name="choose">Pilih</string>

15. <string name="data_received">Data Diterima</string>

16. <string name="object_received">Object Diterima</stri

ng>

17. <string name="this_is_moveactivity">Ini MoveActivity

</string>

18. </resources>

Kemudian masuk ke MainActivity, tambahkan beberapa baris kode yang


berfungsi untuk memperkenalkan button yang sudah ditambahkan di
layout seperti ini.

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


2. super.onCreate(savedInstanceState)
3. setContentView(R.layout.activity_main)
4.
5. val btnMoveActivity: Button =
findViewById(R.id.btn_move_activity)
6. }

Lalu, tambahkan beberapa baris yang berfungsi untuk menambahkan


event onClick pada button btnMoveActivityseperti ini.

1. class MainActivity : AppCompatActivity(), View.OnClickListener {


2.
3. override fun onCreate(savedInstanceState: Bundle?) {
4. super.onCreate(savedInstanceState)
5. setContentView(R.layout.activity_main)
6.
7. val btnMoveActivity: Button =
findViewById(R.id.btn_move_activity)
8. btnMoveActivity.setOnClickListener(this)
9. }
10.
11. override fun onClick(v: View?) {
12. when (v?.id) {
13. R.id.btn_move_activity -> {
14. }
15. }
16. }
17. }

Button btnMoveActivity akan memiliki fungsi untuk berpindah Activity ke


Activity lain. Sekarang kita buat Activity baru dengan cara sebagai
berikut: klik kanan di package utama aplikasi package name → New →
Activity → Empty Views Activity.

Isikan nama Activity dengan MoveActivity pada dialog. Ketika sudah


klik Finish.

Untuk menandakan bahwa perpindahan Activity berhasil, silakan


tambahkan satu TextView dan kondisikan activity_move.xml menjadi
seperti berikut.
1. <RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
2. xmlns:tools="http://schemas.android.com/tools"
3. android:layout_width="match_parent"
4. android:layout_height="match_parent"
5. android:padding="16dp"
6. tools:context=".MoveActivity">
7.
8. <TextView
9. android:layout_width="match_parent"
10. android:layout_height="wrap_content"
11. android:text="@string/this_is_moveactivity" />
12. </RelativeLayout>

Setelah activity tujuan sudah berhasil diciptakan, sekarang saatnya


menambahkan suatu
intent pada method onClick() di MainActivity menjadi sebagai berikut.

1. override fun onClick(v: View?) {


2. when (v?.id) {
3. R.id.btn_move_activity -> {
4. val moveIntent = Intent(this@MainActivity,
MoveActivity::class.java)
5. startActivity(moveIntent)
6. }
7. }
8. }

Selesai! Langkah pertama untuk memindahkan satu activity ke


activity lain sudah selesai, sekarang silakan jalankan aplikasi Anda dengan
mengklik tombol pada menu bar. Seharusnya sekarang Anda sudah bisa
memindahkan activity dengan mengeklik tombol Pindah Activity.

Latihan Mengirim Data pada Intent

Selanjutnya, kita akan membuat sebuah Intent yang di dalamnya akan


membawa data ke Activity tujuan. Apakah Anda sudah siap?

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


bawah tombol sebelumnya. Kode activity_main.xml akan jadi
seperti ini:
1. <Button
2. android:id="@+id/btn_move_activity_data"
3. android:layout_width="match_parent"
4. android:layout_height="wrap_content"
5. android:layout_marginBottom="16dp"
6. android:text="@string/move_with_data" />

2. Setelah selesai dengan penambahan pada


berkas activity_main.xml, lanjutkan dengan menambahkan
beberapa baris berikut di MainActivity.

1. class MainActivity : AppCompatActivity(), View.OnClickListener {


2.
3. override fun onCreate(savedInstanceState: Bundle?) {
4. super.onCreate(savedInstanceState)
5. setContentView(R.layout.activity_main)
6.
7. ...
8.
9. val btnMoveWithDataActivity: Button =
findViewById(R.id.btn_move_activity_data)
10. btnMoveWithDataActivity.setOnClickListener(this)
11. }
12.
13. override fun onClick(v: View?) {
14. when (v?.id) {
15. R.id.btn_move_activity -> {
16. val moveIntent = Intent(this@MainActivity,
MoveActivity::class.java)
17. startActivity(moveIntent)
18. }
19.
20. R.id.btn_move_activity_data -> {
21.
22. }
23. }
24. }
25. }
Latihan RecyclerView

Jika project menggunakan Kotlin, Anda perlu menambahkan


plugin kotlin-parcelize untuk menggunakan fitur @Parcelize. Untuk
menerapkan fitur tersebut, Anda harus menggunakan Kotlin 1.4.20 ke
atas. Cek pada build.gradle.kts (module: app).

1. plugins {

2. alias(libs.plugins.androidApplication)

3. alias(libs.plugins.jetbrainsKotlinAndroid)

4. id 'kotlin-parcelize'

5. }

Ekstraklah berkas zip, kemudian masukkan ke dalam folder drawable.

Kemudian anda perlu masuk ke dalam res → values →


strings.xml untuk menambahkan beberapa string yang dibutuhkan
dalam project.

1. <resources>
2. <string name="app_name">MyRecyclerView</string>
3.
4. <string name="heroes_name">Nama Pahlawan</string>
5. <string name="description">Deskripsi</string>
6.
7. <string-array name="data_name">
8. <item>Ahmad Dahlan</item>
9. <item>Ahmad Yani</item>
10. <item>Sutomo</item>
11. <item>Gatot Soebroto</item>
12. <item>Ki Hadjar Dewantara</item>
13. <item>Mohammad Hatta</item>
14. <item>Soedirman</item>
15. <item>Soekarno</item>
16. <item>Soepomo</item>
17. </string-array>
18.
19. <string-array name="data_description">
20. <item>Salah seorang ulama dan khatib terkemuka di
Masjid Besar Kasultanan Yogyakarta pada masa itu, dan ibu dari
K.H. Ahmad Dahlan adalah puteri dari H. Ibrahim yang juga
menjabat penghulu Kesultanan Ngayogyakarta Hadiningrat pada masa
itu. KH. Ahmad Dahlan telah mempelopori kebangkitan ummat Islam
untuk menyadari nasibnya sebagai bangsa terjajah yang masih
harus belajar dan berbuat. </item>
21. <item>Jenderal TNI Anumerta Ahmad Yani (juga dieja
Achmad Yani; lahir di Purworejo, Jawa Tengah, 19 Juni 1922 –
meninggal di Lubang Buaya, Jakarta, 1 Oktober 1965 pada umur 43
tahun) adalah komandan Tentara Nasional Indonesia Angkatan
Darat, dan dibunuh oleh anggota Gerakan 30 September saat
mencoba untuk menculik dia dari rumahnya.</item>
22. <item>Sutomo (lahir di Surabaya, Jawa Timur, 3
Oktober 1920 – meninggal di Padang Arafah, Arab Saudi, 7 Oktober
1981 pada umur 61 tahun) lebih dikenal dengan sapaan akrab oleh
rakyat sebagai Bung Tomo, adalah pahlawan yang terkenal karena
peranannya dalam membangkitkan semangat rakyat untuk melawan
kembalinya penjajah Belanda melalui tentara NICA, yang berakhir
dengan pertempuran 10 November 1945 yang hingga kini diperingati
sebagai Hari Pahlawan.</item>
23. <item>Jenderal TNI (Purn.) Gatot Soebroto (lahir di
Sumpiuh, Banyumas, Jawa Tengah, 10 Oktober 1907 – meninggal di
Jakarta, 11 Juni 1962 pada umur 54 tahun) adalah tokoh
perjuangan militer Indonesia dalam merebut kemerdekaan dan juga
pahlawan nasional Indonesia. Ia dimakamkan di Ungaran, kabupaten
Semarang.</item>
24. <item>Raden Mas Soewardi Soerjaningrat (EBI:
Suwardi Suryaningrat, sejak 1922 menjadi Ki Hadjar Dewantara,
EBI: Ki Hajar Dewantara, beberapa menuliskan bunyi bahasa
Jawanya dengan Ki Hajar Dewantoro; lahir di Pakualaman, 2 Mei
1889 – meninggal di Yogyakarta, 26 April 1959 pada umur 69
tahun; selanjutnya disingkat sebagai "Soewardi" atau "KHD")
adalah aktivis pergerakan kemerdekaan Indonesia, kolumnis,
politisi, dan pelopor pendidikan bagi kaum pribumi Indonesia
dari zaman penjajahan Belanda. Ia adalah pendiri Perguruan Taman
Siswa, suatu lembaga pendidikan yang memberikan kesempatan bagi
para pribumi untuk bisa memperoleh hak pendidikan seperti halnya
para priyayi maupun orang-orang Belanda.</item>
25. <item>Dr.(HC) Drs. H. Mohammad Hatta (lahir dengan
nama Mohammad Athar, dikenal sebagai Bung Hatta; lahir di Fort
de Kock (sekarang Bukittinggi, Sumatera Barat), Hindia Belanda,
12 Agustus 1902 – meninggal di Jakarta, 14 Maret 1980 pada umur
77 tahun) adalah tokoh pejuang, negarawan, ekonom, dan juga
Wakil Presiden Indonesia yang pertama. Ia bersama Soekarno
memainkan peranan penting untuk memerdekakan bangsa Indonesia
dari penjajahan Belanda sekaligus memproklamirkannya pada 17
Agustus 1945. Ia juga pernah menjabat sebagai Perdana Menteri
dalam Kabinet Hatta I, Hatta II, dan RIS. Ia mundur dari jabatan
wakil presiden pada tahun 1956, karena berselisih dengan
Presiden Soekarno. Hatta juga dikenal sebagai Bapak Koperasi
Indonesia.</item>
26. <item>Jenderal Besar Raden Soedirman (EYD:
Sudirman; lahir 24 Januari 1916 – meninggal 29 Januari 1950 pada
umur 34 tahun) adalah seorang perwira tinggi Indonesia pada masa
Revolusi Nasional Indonesia. Menjadi panglima besar Tentara
Nasional Indonesia pertama, ia secara luas terus dihormati di
Indonesia. Terlahir dari pasangan rakyat biasa di Purbalingga,
Hindia Belanda, Soedirman diadopsi oleh pamannya yang seorang
priyayi. Setelah keluarganya pindah ke Cilacap pada tahun 1916,
Soedirman tumbuh menjadi seorang siswa rajin; ia sangat aktif
dalam kegiatan ekstrakurikuler, termasuk mengikuti program
kepanduan yang dijalankan oleh organisasi Islam Muhammadiyah.
Saat di sekolah menengah, Soedirman mulai menunjukkan
kemampuannya dalam memimpin dan berorganisasi, dan dihormati
oleh masyarakat karena ketaatannya pada Islam. Setelah berhenti
kuliah keguruan, pada 1936 ia mulai bekerja sebagai seorang
guru, dan kemudian menjadi kepala sekolah, di sekolah dasar
Muhammadiyah; ia juga aktif dalam kegiatan Muhammadiyah lainnya
dan menjadi pemimpin Kelompok Pemuda Muhammadiyah pada tahun
1937. Setelah Jepang menduduki Hindia Belanda pada 1942,
Soedirman tetap mengajar. Pada tahun 1944, ia bergabung dengan
tentara Pembela Tanah Air (PETA) yang disponsori Jepang,
menjabat sebagai komandan batalion di Banyumas. Selama menjabat,
Soedirman bersama rekannya sesama prajurit melakukan
pemberontakan, namun kemudian diasingkan ke Bogor.</item>
27. <item>Dr.(H.C.) Ir. H. Soekarno (ER, EYD: Sukarno,
nama lahir: Koesno Sosrodihardjo) (lahir di Surabaya, Jawa
Timur, 6 Juni 1901 – meninggal di Jakarta, 21 Juni 1970 pada
umur 69 tahun) adalah Presiden pertama Republik Indonesia yang
menjabat pada periode 1945–1967. Ia memainkan peranan penting
dalam memerdekakan bangsa Indonesia dari penjajahan Belanda. Ia
adalah Proklamator Kemerdekaan Indonesia (bersama dengan
Mohammad Hatta) yang terjadi pada tanggal 17 Agustus 1945.
Soekarno adalah yang pertama kali mencetuskan konsep mengenai
Pancasila sebagai dasar negara Indonesia dan ia sendiri yang
menamainya.</item>
28. <item>Prof. Mr. Dr. Soepomo (Ejaan Soewandi: Supomo; lahir
di Sukoharjo, Jawa Tengah, 22 Januari 1903 – meninggal di
Jakarta, 12 September 1958 pada umur 55 tahun) adalah seorang
pahlawan nasional Indonesia. Soepomo dikenal sebagai arsitek
Undang-undang Dasar 1945, bersama dengan Muhammad Yamin dan
Soekarno.</item>
29. </string-array>
30.
31. <integer-array name="data_photo">
32. <item>@drawable/ahmad_dahlan</item>
33. <item>@drawable/ahmad_yani</item>
34. <item>@drawable/bung_tomo</item>
35. <item>@drawable/gatot_subroto</item>
36. <item>@drawable/ki_hadjar_dewantara</item>
37. <item>@drawable/mohammad_hatta</item>
38. <item>@drawable/sudirman</item>
39. <item>@drawable/sukarno</item>
40. <item>@drawable/supomo</item>
41. </integer-array>
42. </resources>

lanjut pada activity_main.xml. Untuk menambahkan RecyclerView,


silakan drag item RecyclerView ke dalam screen.

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


2. <androidx.constraintlayout.widget.ConstraintLayout
3. xmlns:android="http://schemas.android.com/apk/res/android"
4. xmlns:app="http://schemas.android.com/apk/res-auto"
5. android:layout_width="match_parent"
6. android:layout_height="match_parent">
7.
8. <androidx.recyclerview.widget.RecyclerView
9. android:id="@+id/rv_heroes"
10. android:layout_width="0dp"
11. android:layout_height="0dp"
12. app:layout_constraintBottom_toBottomOf="parent"
13. app:layout_constraintEnd_toEndOf="parent"
14. app:layout_constraintStart_toStartOf="parent"
15. app:layout_constraintTop_toTopOf="parent" />
16.
17. </androidx.constraintlayout.widget.ConstraintLayout>

Karena data pertama kali akan ditampilkan dalam bentuk list, kita perlu
membuat layout dengan cara klik kanan pada direktori layout → new →
layout resource file dan beri nama item_row_hero.
Pastikan Root element menggunakan ConstraintLayout terlebih
dahulu.

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


2. <androidx.cardview.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
3. xmlns:card_view="http://schemas.android.com/apk/res-auto"
4. xmlns:tools="http://schemas.android.com/tools"
5. android:id="@+id/card_view"
6. android:layout_width="match_parent"
7. android:layout_height="wrap_content"
8. android:layout_gravity="center"
9. android:layout_marginStart="8dp"
10. android:layout_marginTop="4dp"
11. android:layout_marginEnd="8dp"
12. android:layout_marginBottom="4dp"
13. card_view:cardCornerRadius="4dp">
14.
15. <androidx.constraintlayout.widget.ConstraintLayout
16. android:layout_width="match_parent"
17. android:layout_height="wrap_content"
18. android:padding="8dp">
19.
20. <ImageView
21. android:id="@+id/img_item_photo"
22. android:layout_width="70dp"
23. android:layout_height="100dp"
24. android:scaleType="centerCrop"
25. card_view:layout_constraintBottom_toBottomOf="parent"
26. card_view:layout_constraintStart_toStartOf="parent"
27. card_view:layout_constraintTop_toTopOf="parent"
28. tools:src="@tools:sample/avatars" />
29.
30. <TextView
31. android:id="@+id/tv_item_name"
32. android:layout_width="0dp"
33. android:layout_height="wrap_content"
34. android:layout_marginStart="8dp"
35. android:layout_marginEnd="8dp"
36. android:textSize="16sp"
37. android:textStyle="bold"
38. card_view:layout_constraintEnd_toEndOf="parent"
39. card_view:layout_constraintStart_toEndOf="@+id/img_item_pho
to"
40. card_view:layout_constraintTop_toTopOf="@+id/img_item_photo
"
41. tools:text="@string/heroes_name" />
42.
43. <TextView
44. android:id="@+id/tv_item_description"
45. android:layout_width="0dp"
46. android:layout_height="0dp"
47. android:layout_marginTop="8dp"
48. android:ellipsize="end"
49. android:maxLines="5"
50. card_view:layout_constraintBottom_toBottomOf="@+id/img_item
_photo"
51. card_view:layout_constraintEnd_toEndOf="@+id/tv_item_name"
52. card_view:layout_constraintStart_toStartOf="@+id/tv_item_na
me"
53. card_view:layout_constraintTop_toBottomOf="@+id/tv_item_nam
e"
54. card_view:layout_constraintVertical_bias="0.0"
55. tools:text="@string/description" />
56. </androidx.constraintlayout.widget.ConstraintLayout>
57. </androidx.cardview.widget.CardView>

tools:text bisa kita gunakan untuk placeholder di dalam editor layout.


Atribut ini tidak akan terbawa saat run-time dan hanya akan nampak di
dalam preview editor saja. Hasilnya dapat dilihat menggunakan tab Split
atau Design seperti ini.

Kemudian buat sebuah kelas model data bernama Hero dengan cara klik
kanan pada nama package → new → Java/Kotlin class. Class ini
nantinya digunakan untuk menampung property data yang akan
ditampilkan.

Beri nama Hero dan pilih Data Class. Kemudian tekan Enter.

Setelah itu, kita bisa menambahkan property data yang akan ditampilkan,
seperti nama, deskripsi, dan photo.

1. data class Hero(


2. val name: String,
3. val description: String,
4. val photo: Int
5. )

Jangan lupa untuk menambahkan implementasi parcelable ke kelas Hero

1. @Parcelize
2. data class Hero(
3. val name: String,
4. val description: String,
5. val photo: Int
6. ) : Parcelable

Sekarang kita akan membuat sebuah adapter yang akan memformat


tampilan setiap elemen dari koleksi data. Buatlah kelas adapter secara
manual dengan klik kanan pada package utama → new → Kotlin/Java
Class dan beri nama ListHeroAdapter.

1. class ListHeroAdapter(private val listHero: ArrayList<Hero>) :


RecyclerView.Adapter<ListHeroAdapter.ListViewHolder>() {
2.
3. override fun onCreateViewHolder(parent: ViewGroup, viewType:
Int): ListViewHolder {
4. val view: View =
LayoutInflater.from(parent.context).inflate(R.layout.item_row_he
ro, parent, false)
5. return ListViewHolder(view)
6. }
7.
8. override fun onBindViewHolder(holder: ListViewHolder, position:
Int) {
9. val (name, description, photo) = listHero[position]
10. holder.imgPhoto.setImageResource(photo)
11. holder.tvName.text = name
12. holder.tvDescription.text = description
13. }
14.
15. override fun getItemCount(): Int = listHero.size
16.
17. class ListViewHolder(itemView: View) :
RecyclerView.ViewHolder(itemView) {
18. val imgPhoto: ImageView =
itemView.findViewById(R.id.img_item_photo)
19. val tvName: TextView =
itemView.findViewById(R.id.tv_item_name)
20. val tvDescription: TextView =
itemView.findViewById(R.id.tv_item_description)
21. }
22. }

Kemudian kita modifikasi berkas kelas MainActivity dan atur fixed size
RecyclerView yang sudah dibuat di activity_main.

1. class MainActivity : AppCompatActivity() {


2. private lateinit var rvHeroes: RecyclerView
3.
4. override fun onCreate(savedInstanceState: Bundle?) {
5. super.onCreate(savedInstanceState)
6. setContentView(R.layout.activity_main)
7.
8. rvHeroes = findViewById(R.id.rv_heroes)
9. rvHeroes.setHasFixedSize(true)
10. }
11. }

Selanjutnya setelah diinisiasikan, kita akan panggil data yang sudah kita
buat di resource strings.xml.

1. class MainActivity : AppCompatActivity() {


2. private lateinit var rvHeroes: RecyclerView
3. private val list = ArrayList<Hero>()
4.
5. override fun onCreate(savedInstanceState: Bundle?) {
6. super.onCreate(savedInstanceState)
7. setContentView(R.layout.activity_main)
8.
9. rvHeroes = findViewById(R.id.rv_heroes)
10. rvHeroes.setHasFixedSize(true)
11.
12. list.addAll(getListHeroes())
13. showRecyclerList()
14. }
15.
16. private fun getListHeroes(): ArrayList<Hero> {
17. val dataName = resources.getStringArray(R.array.data_name)
18. val dataDescription =
resources.getStringArray(R.array.data_description)
19. val dataPhoto =
resources.obtainTypedArray(R.array.data_photo)
20. val listHero = ArrayList<Hero>()
21. for (i in dataName.indices) {
22. val hero = Hero(dataName[i], dataDescription[i],
dataPhoto.getResourceId(i, -1))
23. listHero.add(hero)
24. }
25. return listHero
26. }
27.
28. private fun showRecyclerList() {
29. rvHeroes.layoutManager = LinearLayoutManager(this)
30. val listHeroAdapter = ListHeroAdapter(list)
31. rvHeroes.adapter = listHeroAdapter
32. }
33. }

Jalankan aplikasi yang dibuat.

Latihan OnClick pada Item RecyclerView

Bukalah kelas ListHeroAdapter dan perhatikan kode berikut.

1. override fun onBindViewHolder(holder: ListViewHolder, position:


Int) {
2. val (name, description, photo) = listHero[position]
3. holder.imgPhoto.setImageResource(photo)
4. holder.tvName.text = name
5. holder.tvDescription.text = description
6. }

Pada bagian ini, kita bisa menambahkan fungsi onclick setiap itemnya
ditekan. Tambahkan kode baris berikut ke dalam fungsi
onBindViewHolder.

1. holder.itemView.setOnClickListener {
2. Toast.makeText(holder.itemView.context, "Kamu memilih " +
listHero[holder.adapterPosition].name,
Toast.LENGTH_SHORT).show()
3. }
Hasilnya akan menjadi seperti ini.

1. override fun onBindViewHolder(holder: ListViewHolder, position:


Int) {
2. val (name, description, photo) = listHero[position]
3. holder.imgPhoto.setImageResource(photo)
4. holder.tvName.text = name
5. holder.tvDescription.text = description
6. holder.itemView.setOnClickListener {
7. Toast.makeText(holder.itemView.context, "Kamu memilih "
+ listHero[holder.adapterPosition].name,
Toast.LENGTH_SHORT).show()
8. }
9. }

jalankan kembali dan pilih salah satu item.

bagaimana jika kita ingin agar fungsi onClick dapat dipicu atau di-
trigger dari kelas MainActivity? Silakan hapus fungsi onClick yang telah
Anda buat sebelumnya, kemudian tambahkan interface berikut dan
implementasikan onClickke kelas interface berikut.

1. class ListHeroAdapter(private val listHero: ArrayList<Hero>) :


RecyclerView.Adapter<ListHeroAdapter.ListViewHolder>() {
2. private lateinit var onItemClickCallback:
OnItemClickCallback
3.
4. fun setOnItemClickCallback(onItemClickCallback:
OnItemClickCallback) {
5. this.onItemClickCallback = onItemClickCallback
6. }
7.
8. ...
9.
10. override fun onBindViewHolder(holder: ListViewHolder,
position: Int) {
11. ...
12.
13. holder.itemView.setOnClickListener {
onItemClickCallback.onItemClicked(listHero[holder.adapterPositio
n]) }
14. }
15.
16. ...
17.
18. interface OnItemClickCallback {
19. fun onItemClicked(data: Hero)
20. }
21. }

Kemudian bukalah MainActivity dan tambahkan satu metode ini


untuk menandakan item mana yang dipilih.

1. private fun showSelectedHero(hero: Hero) {


2. Toast.makeText(this, "Kamu memilih " + hero.name,
Toast.LENGTH_SHORT).show()
3. }

Kemudian tambahkan pada masing-masing metode di list seperti berikut.

1. private fun showRecyclerList() {


2. rvHeroes.layoutManager = LinearLayoutManager(this)
3. val listHeroAdapter = ListHeroAdapter(list)
4. rvHeroes.adapter = listHeroAdapter
5.
6. listHeroAdapter.setOnItemClickCallback(object :
ListHeroAdapter.OnItemClickCallback {
7. override fun onItemClicked(data: Hero) {
8. showSelectedHero(data)
9. }
10. })
11. }

Sekarang jalankan kembali aplikasinya.

Anda mungkin juga menyukai