Menggunakan Java Annotation Interface pada Android

Teknologi.id . April 09, 2018
Artikel ini merupakan repost dari artikel tulisan Ahmad Rosid yang sudah dipublikasikan di Easy Read. Baca artikel sumber.

Pada kesempatan kali ini saya akan membahas tentang Java Annotation interface. Salah satu fitur yang mungkin sering kita pakai namun mungkin sebagian dari kita masih ada yang belum paham dengan cara kerjanya.

Salah satu yang mengimplementasikan fitur java annotation interface ini adalah library yang di buat oleh paman Jack yang kita bisa panggil library nya itu ButterKnife, yang biasa kita gunakan untuk menghilangkan findViewById untuk memotong codingan kita supaya lebih sedikit.

Ya begitulah tujuan di buatnya Java Annotation Interface ini yaitu untuk mengenerate code di dalam code yang kita buat, sehingga akan mempercepat kita dalam aktifitas coding kita sehari — hari.

Nah pada kesempatan kali ini saya akan sedikit memberi contoh latihan tentang bagaimana menggunakan Java Annotation untuk membuat view binding seperti ButterKnife secara sederhana. Dan code ini juga mungkin bisa kamu gunakan untuk project mu supaya bisa menggurangi daftar library yang ada pada projectmu, lumayan kan bisa mengurangi code yang tidak diperlukan.

Knife

Project kita kali ini akan kita akan berinama Knife yang artinya pisau. Dimana kita ibaratkan dengan pisau ini kita bisa memotong code sehingga kita bisa membuat kode yang lebih singkat. Namun pada latihan kali ini kita belum menggunakan Annotation Processor seperti yang paman jack buat. Mungkin akan kita bahas pada artikel selanjutnya.

Pada project ini kita akan membuat tiga annotation interface untuk menghadle view binding, view click dan view on long click. Yang mana hal ini yang paling sering kita gunakan untuk berurusan dengan view pada project kita bukan. Akan tetapi kalau teman — teman ingin mencoba explore untuk case yang lain juga boleh.

KnifeView

Interface KnifeClick ini akan kita gunakan untuk menghandle findviewbyid. Berikut ini annotation interfacenya :

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface KnifeView {
    int value();
}

KnifeClick

Interface KnifeClick ini akan kita gunakan untuk menghandle onclick listener. Berikut ini annotation interfacenya :

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface KnifeClick {
    int value();
}

KnifeLongClick

Interface KnifeLongClick ini akan kita gunakan untuk menghandle onlongclick listener. Berikut ini annotation interfacenya :

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface KnifeLongClick {
    int value();
}

Field — field pada onnotation yang kita buat KnifeView, KnifeClick dan KnifeLongClick fungsinya adalah sebagai berikut :

  • RetentionPolicy.RUNTIME = Annotation interface akan di jalankan hanya pada saat runtime atau aplikasi sedang berjalan.
  • Target(ElementType.FIELD) = Annotation interface akan di pasangkan pada variable yang ada.
  • Target(ElementType.METHOD) = Annotation interface akan di pasangkan pada method yang ada.
  • int value = Parameter untuk mendapatkan id dari view yang akan di click.

Knife

Sekarang tiba saat nya untuk kita membuat pisa dimana kita akan menulis code untuk mengconvert field yang di dapat dari annotation prosessor yang telah kita buat untuk menjadi binding view nya.

Berikut ini adalah codenya:

https://gist.github.com/ar-android/d5058f7715c766a55bc7d896934366ed

Penjelasan

1. bindView

Pada method bindview kita akan melakukan loop terhadap variable fields untuk mendapatkan field yang mengandung annotation KnifeView. Setelah mendapatkan variable yang mengandung Annotation processor maka kita akan mencari view dengan id yang ada pada annotation ( findViewById ) kemudian setelah selesai kita akan mengeset field nya accesible dan memberikan instance view kedalam field yang mengandung annotation KnifeView tadi dimana disini berfungsi seperti Casting dari object view ke object lainya.

2. createOnClick

Pada method createOnClick kita akan melakukan hal yang sama untuk pertamakalinya yaitu melakukan loop pada variable mthods untuk mendapatkan method yang mengandung Annotation Interface KnifeClick. Setelah mendapatnya maka melakukan findview kembali sehingga selanjutnya kita melakukan setOnclickLitener pada view nya, dan di dalam callback click listenernya kita melakukan set accesible terhadap method yang mengandung KnifeClick tadi dan selanjutnya melakukan invoke atau memanggil method dengan memberikan parameter view.

3. createOnLongClick

Pada method createOnClick kita akan melakukan hal yang sama untuk pertamakalinya yaitu melakukan loop pada variable mthods untuk mendapatkan method yang mengandung Annotation Interface KnifeLongClick. Setelah mendapatnya maka melakukan findview kembali sehingga selanjutnya kita melakukan setOnLongClickLitener pada view nya, dan di dalam callback click listenernya kita melakukan set accesible terhadap method yang mengandung KnifeLongClick tadi dan selanjutnya melakukan invoke atau memanggil method dengan memberikan parameter view.

Implementasi

Selanjutnya kita akan menggunakan Java annotation interface yang telah kita buat ke dalam activity kita. Berikut ini contoh penggunaanya:

Kesimpulan

Menggunakan annotation interface ini sangat mudah sekali dan hasilnya bisa mengurangi kita dalam penulisan code yang dengan begitu akan membantu kita mempercepat proses dalam menulis code untuk project kita.

Bagaimana mudah bukan? Kalau kamu merasa tulisan ini bermanfaat jangan lupa untuk share dengan teman — teman ya. Dan janga pula lupa untuk memberikan claps.

Seperti biasa kamu bisa dapatkan source code dari latihan kita kali ini pada laman github saya dibawah ini:

https://github.com/ar-android/Knife.      
Share :