2016-11-28 16 views
15

Đây phải là câu hỏi cơ bản nhất nhưng sau một ngày đọc hướng dẫn và tài liệu hướng dẫn here Tôi dường như không hiểu nơi đặt các phương pháp này. Không có hướng dẫn nào đề cập đến nơi mà điều này được đặt nó chỉ đề cập đến việc sử dụng chú thích trên một phương thức tĩnh. Phương pháp tĩnh nào? Bất kỳ phương pháp tĩnh ở tất cả bất kể lớp học? Thực hành tốt là gì? thế nào để tôi tạo ra một lớp CustomBinding để lưu trữ tất cả các phương pháp tĩnh?Nơi đặt phương thức android BindingAdapter?

Miễn là phương pháp của tôi có chú thích BindingAdapter và tham số đầu tiên là Chế độ xem, nó sẽ hoạt động?

Tôi giả sử nếu tham số đầu tiên thuộc loại Xem tôi có thể đặt thuộc tính ràng buộc trên bất kỳ loại chế độ xem nào và nó sẽ kích hoạt phương pháp? Vì vậy, nếu tôi có cái nhìn cụ thể nói EditText, điều này có nghĩa là phương pháp này chỉ được gọi khi thuộc tính được tìm thấy trong một chế độ xem EditText trong tệp bố cục?

+1

xem cách nó được thực hiện với các bộ điều hợp hiện có, như [TextViewBindingAdapter] (https://android.googlesource.com/platform/frameworks/data-binding/+/android-6.0.0_r7/extensions/baseAdapters/src/ chính/java/android/databinding/adapters/TextViewBindingAdapter.java) và [parent folder] (https://android.googlesource.com/platform/frameworks/data-binding/+/android-6.0.0_r7/extensions/baseAdapters/ src/main/java/android/databinding/adapter) – pskink

Trả lời

11

Sau khi điều hướng thông qua internet cuối cùng tôi đã tìm thấy một số thông tin từ một trong các nhà phát triển chính họ. Tôi muốn họ sẽ rõ ràng hơn về những điều cơ bản trong tài liệu.

Quote:

adapter Binding được chú thích phương pháp trong bất kỳ lớp được sử dụng để làm chỉ này. Thông thường, bạn sẽ tổ chức các bộ điều hợp của mình thành các lớp [-a] dựa trên loại Chế độ xem mục tiêu.

Điều này rõ ràng có nghĩa là tại thời gian biên dịch tất cả các phương thức trong bất kỳ lớp nào có chú thích BindingAdapter sẽ tạo BindingAdapter.

1

Bạn đặt nó trong lớp mô hình của mình.

Ví dụ:

XML:

<data> 

    <variable 
     name="item" 
     type="com.yourpackage.Model"/> 
     </data> 
     ...... 

      <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@{item.resId}"/> 

mẫu:

public class Model { 

@DrawableRes 
private final int resId; 

public Model(int resId) { 
    this.resId = resId; 
} 

public int getResId() { 
    return resId; 
} 

@BindingAdapter ("android:src") 
public static void setImageResource(ImageView imageView, int resource){ 
    imageView.setImageResource(resource); 
} 

}

+0

Hãy giải thích đây có phải là cách duy nhất để làm điều đó hay là theo cách của bạn? Có một số BindingAdapters được nhóm trong một lớp, ví dụ: https://android.googlesource.com/platform/frameworks/data-binding/+/android-6.0.0_r7/extensions/baseAdapters/src/main/java/android/ databinding/adapters/TextViewBindingAdapter.java – chaser

+2

Tôi không nghĩ rằng lớp mô hình không phải là một nơi tốt để đặt BindingAdapter này bởi vì nó không có nghĩa là ghép nối với mô hình. Ví dụ: tôi không thể thực hiện hai '@BindingAdapter (" android: src ")' - một để chia tỷ lệ hình ảnh thành 200x200 và hình ảnh khác để chia tỷ lệ hình ảnh thành 400x400. Tôi nghĩ rằng có thể tốt hơn là đặt chúng vào một lớp đặc biệt để ràng buộc (ví dụ 'BindingAdapterUtils'). – Sam

+0

@Bạn có bất kỳ ý tưởng nào trong khi sử dụng Bộ kết nối không có chế độ xem tùy chỉnh không? Tôi đã cố gắng mang đến tệp khác nhưng không biết cách đặt nó vào thẻ – TruongHieu

Các vấn đề liên quan