Showing posts with label Parcelable. Show all posts
Showing posts with label Parcelable. Show all posts

Sunday, March 18, 2018

Kotlin Android Extensions - improve support for Android development

Hello guys! berjumpa lagi bareng gw yang bakal ngebahas Kotlin Android Extensions yang merupakan sebuah plugin yang bisa diimplementasikan di Android Studio dengan beberapa kekuatannya untuk membantu dalam pengembangan aplikasi android.

Oh ya guys, perlu diketahui juga dalam blog kali ini bahasa yang bakal digunain yaitu kotlin. Untuk yang belum tahu mengenai kotlin itu apa atau cara instalasinya begimana, kalian bisa cek blog sini yang di post oleh mas Adi Trioka.

Support apa aja sih yang di improve oleh Kotlin Android Extensions ini?

Beberapa kekuatan yang disajikan plugin ini diantaranya ViewBinding dan Parcelable objek yang sering kita gunain dalam development. Lengkapnya dapat kalian cek di sini.

Implementasi

Oke guys, lanjut implementasi aja yuk! Sebelumnya kalian perlu install kotlin nya terlebih dahulu sebelum menggunakan plugin ini. Bagi yang masih aja belum tau kotlin itu apa atau cara instalasinya begimana, cek lagi deh blognya mas Adi Trioka.

Selanjutnya, setelah instalasi kotlin selesai, cukup tambahin line berikut di module app build.gradle :
apply plugin: 'kotlin-android-extensions'

Oh ya, karena bahasan kita kali ini ada Parcelable-nya juga. Tambahin juga line berikut di module app build.gradle :
androidExtensions {
    experimental = true
}

Oke, instalasinya cukup sekian guys. Lanjut ke bagaimana implementasi ViewBinding di plugin ini, sebagai contoh kasus sebuah view sederhana yang bernama content_main.xml berisikan TextView :
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.nostratech.mahdi.helloworld.MainActivity"
    tools:showIn="@layout/activity_main">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

Kemudian view tersebut bakalan kita panggil di MainActivity cukup dengan import kotlinx.android.synthetic.main.content_main.* untuk dapat memanggil langsung component yang tersedia pada view tersebut seperti code berikut :
import kotlinx.android.synthetic.main.content_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        textView.text = "Hello guys!"
    }
}

Simpel banget kan? kalian ga perlu melakukan findViewById() bla bla bla ... lagi atau menggunakan third party library seperti Butterknife yang pernah dibahas mas Andy Wiranata di blognya atau Android Annotations yang pernah gw bahas di blog sebelumnya. *cheers*

Oke, selanjutnya kita coba Parcelable objeknya ya!
Buat objek yang nge-extend Parcelable. Dalam contoh kasus kali ini gw ngebuat sebuah objek kontak yang berisi id, firstName, lastName, phoneNumber, dan homeAddress seperti pada code berikut :
import kotlinx.android.parcel.Parcelize
@Parcelize
data class Contact(
        val id: Long,
        val firstName: String,
        val lastName: String?,
        val phoneNumber: String,
        val homeAddress: String) : Parcelable

Setelah objeknya dibuat, masukin objek tersebut ke dalam intent seperti biasanya. Dalam contoh kasus, gw mau ngedit sebuah kontak yang telah dipilih dalam sebuah daftar kontak untuk diedit di activity buat ngeditnya dong seperti yang nampak di code berikut :
private fun editContact(contact: Contact) {
    val intent = Intent(this, EditContactActivity::class.java)
    intent.putExtra("contact", contact)
    startActivity(intent)
}

Kemudian pada EditContactActivity-nya, ambil extra dengan kata kunci "contact" untuk mengambil parcel yang telah dibungkus di intent tadi seperti pada code berikut :
private fun getContact(): Contact? {
    return if (intent.hasExtra("contact")) intent.getParcelableExtra("contact")
    else null
}

Simpel kan? Alright guys, untuk fitur lengkapnya bisa kalian akses di sini. Sekian dulu dari gw. Semoga dapat bermanfaat dan sampai jumpa di blog berikutnya! See ya!

Tuesday, March 15, 2016

Tip dan Trik Implement Parcelable

Bagi android developer , tentu sudah tidak asing lagi dengan apa itu Parcelable. Yap, Parcelable merupakan suatu interface di Android yang berguna untuk menyimpan atau mengambil kembali sebuah kelas atau object. Ketika kita mengimplement Parcelable maka kita juga harus mengimplement method describeContents() dan writeToParcel(Parcel parcel, int i) , selain itu kita juga harus menambahkan Parcelable implementation yaitu static field bernama CREATOR, yang berfungsi untuk meng-generate objek yang memakai interface Parcelable itu dan sebuah constructor. Sebelum saya mengetahui trik yang super simple ini , dalam meng implement Parcelable , saya selalu melakukannya secara manual , mengetik satu persatu implement di dalam constructor maupun di dalam method writeToParcel
Berikut ini trik trik nys :
Sebelum kita mengimplement Parcelable, kita tulis dulu semua attribute yang digunakan oleh class tersebut. misalnya seperti ini :
public class Pegawai {
    
    String id;
    String name;
    String address;
    Long birthDate;
            
}

Setelah itu baru kita implement Parcelable, Akan muncul lampu merah di pinggir baris code,klik tanda tersebut

klik "implement method" maka akan tergenerate 2 buah method seperti di bawah ini
public class Pegawai implements Parcelable{
    String id;
    String name;
    String address;
    Long birthDate;

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {}
}

Sampai disini masih ada tanda error, klik sekali lagi lampu merah tersebut seperti gambar di bawah ini

klik "add Parcelable implementation" maka , jreng jreng,akan tergenerate otomatis semua implement berdasarkan attribute class tersebut seperti ini :
public class Pegawai implements Parcelable{

    String id;
    String name;
    String address;
    Long birthDate;

    protected Pegawai(Parcel in) {
        id = in.readString();
        name = in.readString();
        address = in.readString();
    }

    public static final Creator CREATOR = new Creator() {
        @Override
        public Pegawai createFromParcel(Parcel in) {
            return new Pegawai(in);
        }

        @Override
        public Pegawai[] newArray(int size) {
            return new Pegawai[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeString(id);
        parcel.writeString(name);
        parcel.writeString(address);
    }
}

Perlu diperhatikan bahwa urutan yang ada di writeToParcel dan constructor haruslah sama dan tidak semua tipe data primitif berlaku terhadap tips ini.
Demikian tips dan trik dari saya , semoga bermanfaat :D