23/09/2018, 00:39

Tìm hiểu cách sử dụng cơ bản về Data binding trong Android

Hi! Xin chào mọi người^^ Hôm nay, rảnh rỗi sinh nông nổi nên mở máy viết 1 bài chia sẻ kinh nghiệm về lập trình Android cho những người mới^^ Do kiến thức của mình còn hạn hẹp nên bài viết chỉ mang tính chất chia sẻ và hướng tới những bạn mới học lập trình Android như mình. Vậy có chỗ nào sai xót ...

Hi! Xin chào mọi người^^ Hôm nay, rảnh rỗi sinh nông nổi nên mở máy viết 1 bài chia sẻ kinh nghiệm về lập trình Android cho những người mới^^ Do kiến thức của mình còn hạn hẹp nên bài viết chỉ mang tính chất chia sẻ và hướng tới những bạn mới học lập trình Android như mình. Vậy có chỗ nào sai xót mong mọi người đóng góp ý kiến tích cực để mình sửa chữa nhé. Lan man quá rồi, đi vào chủ đề chính nha. Hôm nay, mình sẽ chia sẻ cho các bạn 1 thư viện dùng để ràng buộc(binding) dữ liệu - DataBinding.

Giới thiệu

Thông thường, chúng ta dùng phương thức findViewByID() để ánh xạ view, hoặc nhanh gọn hơn là dùng thư viện ButterKnife đúng không nào. Data binding không những làm đc điều đó mà còn làm được nhiều thứ hay hơn nữa. Nó giúp chúng ta phải viết code mất ít thời gian hơn và linh hoạt hơn trong việc gán và cập nhật dữ liệu. Data binding được Google công bố trong sự kiện Google I/O 2015. Giờ chúng ta đi vào tìm hiểu chi tiết một số tính năng cơ bản của Data binding nha.

Cài đặt

Cài đặt thư viện này rất đơn giản, bạn chỉ cần cấu hình file build.gradle như dưới là được.

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

À quên mất, có một điều mà bạn cần lưu ý là thư viện này yêu cầu thiết bị phải chạy Android M trở lên, Android studio version >= 1.3 và Android Suppport Library > 15.0. Bây giờ, chúng ta đi vào phần cách sử dụng nhé ^^

Cách sử dụng

Để hiểu được cách sử dụng , chúng ta đi vào một ví dụ nho nhỏ nha. Trước tiên, mình tạo một đối tượng như sau:

public class Person{

    private String name;
    private String age;
     
    public Person(String name, String age)  
    {  
        this.name = name;  
        this.age = age;  
    }  
    public String getName()  
    {  
        return this.name;  
    }  
    public String Age()  
    {  
        return this.age;  
    }  
    public void setName(String name)  
    {  
        this.name = name;  
    }  
    public void setAge(String age)  
    {  
        this.age = age; 
}

Rồi, mình sẽ tạo một file dùng để handle sự kiện onclick cho button.

public class MyHandlers {
    public void onClick(){
    //Todo something
    
    }
}

Tiếp theo, mình tạo một file layout activity_detail.xml như sau:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <data>
        <variable
            name="item"
            type="com.tuan.demo.databinding.models.Person" />
        <variable name="handlers" 
            type="com.tuan.demo.databinding.MyHandlers"/>
    </data>

    <LinearLayout    
        android:layout_awidth="match_parent"    
        android:layout_height="match_parent"    
        android:orientation="vertical">  
    <TextView
        android:id="@+id/name"
        android:layout_awidth="match_parent"
        android:layout_height="wrap_content"
        android:textColor="@color/black"
        app:imageURL="@{item.name}"
        tools:text="coin card" />

    <TextView
        android:id="@+id/age"
        android:layout_awidth="match_parent"
        android:layout_height="wrap_content"
        android:text="@{item.age}"
        android:textColor="@color/black"
        android:textSize="@dimen/feed_date"
        android:textStyle="bold" />
        
    <Button
        android:id="@+id/button"
        android:layout_awidth="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click"
        android:onClick="@{handlers.onClick}"
    </LinearLayout>  
</layout>

Các bạn sẽ thấy, thẻ <layout></layout> sẽ là thẻ lớn nhất. Nó chứa thẻ <data></data> và đoạn code giao diện. Thẻ <data></data> sẽ chứa các thẻ <variable/>, thẻ <variable/> dùng để khai báo các biến mà chúng ta sẽ sử dụng nó để binding dữ liệu hoặc set các sự kiện cho view. Như đoạn code trên thì mình đang khai báo 1 biến person, biến này là một đối tượng Person. Dòng type="com.tuan.demo.databinding.models.Person" chính là package chứa file Person mà mình tạo ở trên đó. Biến person này dùng để gán dữ liệu cho TextView bên dưới. Còn biến handlers dùng để set sự kiện onclick cho button.

Tiếp theo, mình tạo file DetailActivity.java, code trong hàm onCreate() như sau:

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  ActivityDetailBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_detail);
      Person person = new Person("tim", "18")
      binding.setItem(person);
      MyHandlers handlers = new MyHandlers();
      binding.setHandlers(handlers);
}

Vậy là chúng ta có thể set text cho TextView và set sự kiện onclick cho Button bằng Data binding rồi. Khá là đơn giản phải không nào. Các bạn cũng có thể tìm hiểu sâu hơn về data binding ở đây nha: https://developer.android.com/topic/libraries/data-binding/

0