2016-12-14 1 views
0

Я пытаюсь создать многоразовый макет included.xml, который затем может быть введен в другие макеты и настроен с помощью атрибутов тегов. Вот что у меня есть:привязка данных Android: не может вставить атрибут в тег «include»

res/layout/parent.xml:

<?xml version="1.0" encoding="utf-8"?> 
<layout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/com.myself.fancyapp" 
    > 

    <include layout="@layout/included" 
      app:src123="@drawable/my_icon" /> 

</layout> 

res/layout/included.xml:

<?xml version="1.0" encoding="utf-8"?> 
<layout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    > 
    <data> 
     <variable name="src123" type="android.graphics.drawable.Drawable" /> 
    </data> 

    <android.support.design.widget.FloatingActionButton 
     android:src="@{src123}" /> 
</layout> 

app/build.gradle:

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 

    dataBinding { 
     enabled = true 
    } 
    .... 
} 

dependencies { 
    compile 'com.android.support:appcompat-v7:23.1.1' 
    compile 'com.android.support:design:23.1.1' 
} 

Как результат, кнопка, которую я стараюсь привнести не содержат любое изображение.

Если в parent.xml меняю xmlns:app к res-auto, у меня есть следующее сообщение об ошибке в app/build/intermediate/data-binding-layout-out/debug/layout/parent.xml:

Error:(17) No resource identifier found for attribute 'src123' in package 'com.myself.fancyapp'

Кто-нибудь есть идея, почему это происходит и как это исправить? Благодарю.

+0

'XMLNS: приложение = "http://schemas.android.com/apk/res-auto"' держать это в parent.xml и увидеть выход –

+0

@RaviRupareliya Спасибо за предложение, но, как уже упоминалось в последней части моего сообщения он выдает ошибку времени компиляции. – stillwaiting

+0

для подтверждения вы используете DataBinding в классе, где вы используете parent.xml? или вы просто используете 'setContentView' или' inflater' для parent.xml? –

ответ

2

Проблема заключается в том, что вы не используете синтаксис связывания для переменной:

<include layout="@layout/included" 
     app:src123="@drawable/my_icon" /> 

должно быть:

<include layout="@layout/included" 
     app:src123="@{@drawable/my_icon}" /> 

Unrelated, но я не думаю, что включает в себя разрешается как корневой элемент макета. Я считаю, что вам придется иметь нормальный вид вокруг include.

<?xml version="1.0" encoding="utf-8"?> 
<layout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/com.myself.fancyapp" 
    > 

    <FrameLayout android:layout_width="match_parent" 
       android:layout_height="match_parent"> 
     <include layout="@layout/included" 
       app:src123="@{@drawable/my_icon}" /> 
    </FrameLayout> 
</layout> 
+0

Спасибо, Джордж, это работает как шарм! – stillwaiting

Смежные вопросы