Posts

Mengenal Data Binding pada Pemrogramman Android

Bismillah, pada kali ini kita akan membahas tentang Data Binding,

Data Binding merupakan salah satu bagian dari support library yang fungsinya untuk memudahkan kita dalam menyambungkan/mengikat sebuah data ke bagian UInya, sehingga kita tidak perlu melakukan set data secara manual melalui bagian kode programnya.

Untuk menggunakan Data Binding kita harus mengaktifkannya terlebih dahulu pada Build.gradle, dengan cara menambahkan potongan baris konfigurasi berikut :

android {
    ...
    dataBinding {
        enabled = true
    }
}

Jika gradlenya sudah di sinkronisasi maka kita sudah bisa menggunakan Data Binding.

Untuk memahami penggunaan Data Binding, kita akan membuat sebuah project sederhana, pada project ini kita akan membuat sebuah model User, lalu kita akan mencoba binding datanya ke UI.

Binding Sederhana

Buat sebuah project baru

Langkah selanjutnya kita buat class model User seperti berikut:

package id.rdev.databindingexample.model

data class User (
    val username: String,
    var email: String,
    var realname: String,
    var numberPhone: String
)

Langkah selanjutnya kita akan mengedit Layout activity_main.xml agar bisa menggunakan Data Binding, kita edit menjadi seperti berikut :

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    
    <data>
        <variable
            name="user"
            type="id.rdev.databindingexample.model.User" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="16dp">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Profile"
            android:textSize="26sp"
            android:textStyle="bold"
            android:padding="8dp"
            android:textAlignment="center"
            android:layout_marginBottom="8dp"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@{`Username : ` + user.username}"
            android:textSize="24sp"
            android:padding="8dp"
            android:layout_marginBottom="8dp"
            tools:text="Name : exampleusername"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@{`Email: ` + user.email}"
            android:textSize="24sp"
            android:padding="8dp"
            android:layout_marginBottom="8dp"
            tools:text="Email : Example@mail.com"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@{`Name : ` + user.realname}"
            android:textSize="24sp"
            android:padding="8dp"
            android:layout_marginBottom="8dp"
            tools:text="Name : Example Name"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@{`Number phone : ` + user.numberPhone}"
            android:textSize="24sp"
            android:padding="8dp"
            android:layout_marginBottom="8dp"
            tools:text="Number phone : +62 8093 2340 22"/>

    </LinearLayout>

</layout>

Kita telah membuat viewnya, selanjutnya kita akan mencoba binding datanya dari MainActivity

package id.rdev.databindingexample

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import id.rdev.databindingexample.databinding.ActivityMainBinding
import id.rdev.databindingexample.model.User

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)

        // example user
        val user = User("rizal", "syahrizal@mail.com", "Syahrizal Akbar", "+62 91238 19283")

        binding.user = user
    }
}

kita coba run maka hasilnya seperti berikut :

Selanjutnya kita akan coba menjalankan method pada MainActivity melalui layoutnya, kita tambahkan variable di layoutnya seperti berikut :

<data>
        ...
        <variable
            name="act"
            type="id.rdev.databindingexample.MainActivity" />
    </data>

lalu dia layoutnya kita tambahkan Button seperti berikut :

<Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="SHOW USER"
            android:onClick="@{() -> act.printUser(user)}"/>

terakhir kita set variabelnya

override fun onCreate(savedInstanceState: Bundle?) {
        ...
        binding.act = this
    }

dan kita run

Selain itu kita juga bisa membuat exspression pada layoutnya, untuk membuatnya kita tambahkan isAdmin di modelnya seperti berikut :

data class User ( 
    ...
    var isAdmin: Boolean
)

lalu pada MainActivity kita tambahkan true diconstructor usernya

// example user
        val user = User("rizal", "syahrizal@mail.com", "Syahrizal Akbar", "+62 91238 19283", true)

jika sudah kita tambahkan TextView dilayoutnya untuk kita tampilkan jika dia sebagai admin

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@{user.username + ` is Admin`}"
    android:textSize="18sp"
    android:padding="8dp"
    android:background="@color/colorPrimary"
    android:textColor="@android:color/white"
    android:layout_marginBottom="8dp"
    android:visibility="@{user.isAdmin() ? View.VISIBLE : View.GONE}"
    tools:text="username is Admin"/>

jangan lupa import juga Viewnya

<data>
     <import type="android.view.View"/>
     ...
</data>

dan kita run lagi maka hasilnya seperti berikut :

Leave a Reply :

* Your email address will not be published.