<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/description" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>And say you want to finally give data binding a try. So you watch Yigit's I/O talk on data binding and follow the steps on implementation.
You enable it in Gradle:
android { dataBinding { enabled = true } }
You wrap your existing layout in <layout> tags.
<layout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> ... </LinearLayout> <layout>
Then life started sucking. Your app won't compile. Well, we can fix it in two easy steps!
Step 1: Add namespace declaration to your root tag:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
This still won't compile! If you look at the logs you will see somewhere there: "Error:(7) Error parsing XML: duplicate attribute"
Step 2: Remove xmlns declaration in the now-non-root layout.
And that's it. Add your variables and happy data binding!
Here's a complete layout file for your perusal:
<layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="listing" type="com.zdominguez.blog.samples.Listing"/> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@{listing.address}" /> <TextView android:id="@+id/description" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@{listing.agency}" /> </LinearLayout> <layout>