2016-04-04 12 views
5

Tôi có 2 bố cục: một cho v19 + và một cho phiên bản cũ hơn. Chúng chứa các khung nhìn khác nhau với các id khác nhau. Làm thế nào tôi có thể nói khung DataBinding Android mà tôi muốn làm việc với cả hai bố trí? Nó tạo ra các khung nhìn chỉ cho một bố cục (chọn ngẫu nhiên).Cách liên kết bố cục với một số vòng loại

bố trí/temp_view.xml:

<layout 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"> 

    <data> 

     <variable 
      name="block" 
      type="ru.temp.model.content.blocks.WebMediaBlock" /> 

     <import type="ru.temp.model.Types.ProviderTypes" /> 

    </data> 

    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     tools:background="@android:color/white"> 

     <ImageView 
      android:id="@+id/provider" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:paddingTop="@dimen/size5" 
      android:src="@{ProviderTypes.fromString(block.provider).getResId()}" /> 
    </FrameLayout> 
</layout> 

layout-V19/temp_view.xml:

<layout 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"> 

    <data> 

     <variable 
      name="block" 
      type="ru.temp.model.content.blocks.WebMediaBlock" /> 

     <import type="ru.temp.model.Types.ProviderTypes" /> 

    </data> 

    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     tools:background="@android:color/white"> 
     <ru.temp.utils.EmbedView 
      android:id="@+id/media_embed" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

     <ru.temp.structure.static_material.CreditsView 
      android:id="@+id/credits_view" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </FrameLayout> 
</layout> 

Cập nhật:

Cuối cùng tôi đã phát hiện ra gốc rễ của vấn đề. Tôi không biết tại sao nhưng nó không tạo ra tập tin * BindingImpl khi sử dụng minSdkVersion 21. Nếu chỉ định các phiên bản trước nó hoạt động như đã nói @yigit

+0

Bạn cũng có thể kiểm tra hướng dẫn [this] (http://chintanrathod.com/develop_apps_faster_using_data_binding_part2/) để bạn tham khảo. –

+0

Nó không bao gồm chi tiết vấn đề – LackOfKnowledge

Trả lời

1

Ràng buộc dữ liệu sẽ tạo ra một lớp cơ sở phục vụ như một giao diện chung cho cả hai (biến). Ràng buộc dữ liệu sẽ đảm bảo việc tạo đúng cá thể khi bạn gọi DataBindingUtil.setContentView(activity, R.layout.tmp_view).

Ví dụ, trong ví dụ của bạn, nó sẽ tạo ra

TempViewBinding, TempViewBindingImplTempViewBindingV19Impl. Bạn có thể kiểm tra các lớp này bên trong <app module>/build/intermediates/classes/<your package>/databinding/ sau khi bạn biên dịch.

TempViewBinding là lớp cơ sở và nó sẽ có kết hợp các biến và chế độ xem cho mỗi bố cục. Nếu bạn không nhìn thấy chúng trong IDE, có thể là lỗi tự động hoàn thành trong AS (vui lòng gửi lỗi).

+0

Thật không may nó không tạo ra các lớp học Impl như vậy. Và tôi không thể tìm thấy thông tin bạn cung cấp trên các tài liệu chính thức. Không thể xác định những gì tôi đang làm sai – LackOfKnowledge

+0

nếu bạn có thể tải lên một dự án mẫu, tôi rất vui khi xem xét nó – yigit

+0

xin lỗi vì phản hồi muộn nhưng có nhiều thời gian để phát hiện sự cố. Vui lòng kiểm tra bản cập nhật của phần đầu. Và nhìn vào các dự án thử nghiệm (master branch) https://github.com/rchugunov/buzzer Trong phiên bản hiện tại databinding không tạo ra các tập tin Impl. Nhưng nếu bạn thiết lập minSdkVersion 15 trong build.gradle nó sẽ làm! – LackOfKnowledge

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