Я не получил удовлетворительных ответов. Итак, вот советы, которые обобщают мои знания о привязке данных.
Советы по решению проблем с привязкой данных
Обновить
Чтобы получать более точные ошибки и предложения , я настоятельно рекомендую обновить версию плагина Android Studio и Gradle до последней. Потому что после версии AS 3.2 у меня не так много проблем.
Смотрите последнюю версию Android Studio и последний плагин Gradle .
Оригинальное решение
Прочитав этот ответ, вы не столкнетесь с проблемами автоматического создания привязки данных как для классов, так и для переменных данных .
Проверяйте эти пункты один за другим. Любой из них может сделать вашу работу. Последний пункт 3 действительно важен, так что не упускайте его.
1. Проверьте, включена ли привязка данных.
У вас должна быть включена привязка данных в build.gradle
. Если нет, добавьте это и синхронизируйте .
android {
...
dataBinding {
enabled = true
}
...
}
2. Макет чека преобразован в макет переплета.
Теперь, если вы хотите, чтобы был сгенерирован класс привязки данных, вам следует обернуть его xml layout
привязкой данных ( <layout
тегом). Что-то вроде этого.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.constraint.ConstraintLayout>
</layout>
Наряду с этим проверьте правильность имен переменных привязки, как в классе модели представления.
3. Автоматически сгенерированное имя класса привязки?
Ваш класс привязки данных должен быть сгенерирован после создания макета привязки.
Если ваше имя макета указано в случае змеи, activity_main.xml
тогда класс привязки данных будет создан в случае верблюда, например ActivityMainBinding
.
4. Не видите предложения по импорту?
Иногда , когда вы печатаете ActivityMai...
, то это не показывает предложение , в этом случае импорт вручную .
import <yourpackage>databinding.ActivityMainBinding;
5. Прочтите журнал ошибок сборки.
Ваш класс привязки и новые переменные в макете не будут созданы, если ваша сборка не удалась. Итак, сначала создайте проект с помощью Ctrl + F9 (Сборка> Создать проект) .
- Если сборка не удалась, посмотрите, что это за ошибка, обычно у нас есть ошибки в полях макета. Журналы ошибок будут указывать номер строки ошибки с проблемой.
- Привязка может не сработать, что приведет к глупой ошибке , например синтаксической ошибке или отсутствию импорта. В этом случае вы получите logcat, полный ошибок классов привязки. Но вы должны прочитать полный журнал, чтобы найти соответствующую проблему .
6. Закройте и откройте проект из недавнего
Я всегда так делаю, потому что это занимает гораздо меньше времени, чем Rebuild
/ Make
project.
- Закройте проект из файла> Закрыть проект
- Открыть снова из недавних
Обратите внимание, что я предпочитаю Close и Open from Recent, потому что это занимает гораздо меньше времени, чем Rebuild / Restart IDE .
7. Восстановить проект
Если по-прежнему ваш класс не сгенерирован. (Иногда, когда мы вставляем файл макета, это происходит). Затем перестройте проект из Build> Rebuild
(а не сборку или создание проекта ). Он сгенерирует ваш класс привязки данных. ( Rebuild делает за меня Magic. )
8. Установите последнюю версию Android Studio.
После обновления AS до Android Studio 3.2 я почувствовал, что исправлено много ошибок в автогенерации привязки данных. Так что у вас также должна быть последняя версия AS.
Решение для <variables
<data>
<variable
name="item"
type="com.package.Model"/>
</data>
Обычно, когда мы помещаем переменную в макет, он создает для нее геттер и сеттер. И мы можем использовать binding.setItem(item);
и binding.getItem();
, но если вы не видите эти методы, прочтите информацию ниже.
1. Закройте и откройте проект из недавнего
Если вы создали переменную данных - <variable
в своем макете, и она не отображает ее установщик и получатель в классе привязки данных, затем закройте и откройте из недавнего вашего проекта.
2. Очистите проект после изменения типа
Если вы изменили тип некоторых <variable
в своем макете и тип установщика геттера не меняется, тогда Clean project ( Build> Clean Project
)
Заключительные слова
Наконец, если ваш класс привязки по-прежнему не сгенерирован, значит, у нас есть самое мощное оружие. - Перезагрузите Android Studio: D
- Сначала попробуйте просто перезапустить , это всегда генерирует переменные моего макета привязки после перезапуска.
- Если это не сработает, сделайте недействительный кеш и перезапустите .
Это все, что я делаю для решения моих ошибок привязки данных. Если у вас возникнут дополнительные проблемы, вы можете прокомментировать здесь.
dataBinding.enabled
в вашем build.gradle?