Memanggil startActivityForResult dalam RecyclerView

Azis Naufal
UNIKOM Codelabs
Published in
2 min readMar 6, 2021
Photo by Muhammad Rosyid Izzulkhaq on Unsplash

Hai!

Sudah lama tidak mengunggah cerita disini. Mohon maaf suka kelupaan anaknya hehehe πŸ˜…βœŒ. Oke tips mudah kali ini mungkin jarang ada yang pakai. Tetapi cukup layak untuk dibagikan.

Kita berangkat dari masalah kita tidak bisa mengakses method startActivityForResult yang ada pada kelas FragmentActivity. Method ini digunakan ketika kita ingin meluncurkan sebuah activity tetapi mengharapkan hasil ketika activity tersebut telah berhenti.

Sayangnya, ketika kita ingin menjalankan activity baru melalui RecyclerView.Adapter hanya bisa mengakses obyek context dari view yang sudah diinflate. Jadi bagaimana kita bisa mengakses method startActivityForResult pada RecyclerView.Adapter? Kita perlu paham terlebih dahulu mengenai polymorphism. Terutama polymorphism dinamis yang menggunakan interface. Hal ini telah dijelaskan diartikel ini Belajar Java OOP: Memahami Prinsip Polimorfisme dalam OOP (petanikode.com). Teman-teman bisa baca terlebih dahulu untuk memperkaya pengetahuan.

Jadi, bagaimana implementasinya? Kita perlu membuat interface baru, sebut saja OnItemClickListener. Isinya seperti berikut ini:

Interface baru telah dibuat. Kita perlu memberitahukan kepada RecyclerView Adapter kita bahwa ada interface yang dapat digunakan.

Setelah kita memberitahukan bahwa terdapat interface yang dapat digunakan (ditandai dengan warna kuning). Kita perlu memanfaatkan interface ini dengan memanggil method yang ada didalamnya. Interface ini memiliki method onItemClick. Skenario kita adalah ketika sebuah item pada RecyclerView diklik, maka akan memanggil method startActivityForResult pada activity yang menginstansiasi adapter ini. Maka dari itu kita perlu memanggil method onItemClick pada interface yang telah dikirim (ditandai dengan warna hijau).

Lalu activity perlu mengimplementasikan interface OnItemClickListener (ditandai dengan warna kuning) lalu mengirimkannya ketika adapter diinstansiasi (ditandai dengan warna kuning pada baris 31). Kelas MainActivity akan error ketika mengimplementasikan interface OnItemClickListener. Maka dari itu kelas MainActivity perlu mengoverride method onItemClick (ditandai dengan lingkaran merah). Isi dari method tersebut dapat kita gunakan untuk memanggil startActivityForResult pada MainActivity.

Gimana? Mudah kan? Tapi cukup pusing juga. πŸ˜…

Jadi sang adaptor tidak akan pernah tau apa yang dilakukan oleh method onItemClick. Tetapi activity tau apa yang dilakukan oleh method onItemClick.

Mohon maaf kalau masih sulit untuk dipahami. Yuk komentar bagian mana yang sulit dipahami. πŸ˜‰

--

--

Azis Naufal
UNIKOM Codelabs

Mobile Engineer β€” Android , Backend Engineer β€” Laravel/Lumen