Почему мои связанные данные не отображаются в Android XML? - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть пользовательский макет, который я хочу использовать в нескольких местах, поэтому я хочу иметь возможность передавать ему заголовок, поскольку это единственное значение, которое действительно изменится.Я знаю, что могу сделать это, связав данные, но не могу получить данные для рендеринга.

В моем activity.main у меня есть:

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

    <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:context="com.r.e.MainActivity">

        <include
            layout="@layout/switch_preference_custom_title"
            app:passedTitle="@{@string/hello_world}" />

    </RelativeLayout>

</layout>

Я определил свой собственный макетследующим образом:

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

    <data>
      <variable
        name="passedTitle"
        type="String"/>
    </data>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

         <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="@{passedTitle}" />

    </RelativeLayout>

 </layout>

Я также добавил

dataBinding {
    enabled = true
}

в свой build.gradle.Мой проект компилируется и работает нормально, а макет действительно рендерится (я могу сказать, давая ему фон), но текст - пустая строка.

1 Ответ

0 голосов
/ 01 мая 2019

Похоже, что одна последняя ссылка была пропущена. Вместо того, чтобы

setContentView(R.layout.activity_main);

в MainActivity, нужно объявить

DataBindingUtil.setContentView(this, R.layout.activity_main);

Это связывает библиотеку привязок данных с корневым макетом, без которого ни одна из ваших привязок данных фактически не будет отображаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...