Я не отримав жодної задовільної відповіді. Отже, ось поради, які є підсумком моїх знань щодо прив’язки даних.
Поради щодо вирішення проблем, пов’язаних із прив’язкою даних
Оновлення
Щоб отримати точніші помилки та пропозиції , настійно рекомендую оновити версію плагіна Android Studio та Gradle до останньої. Тому що я не стикаюся з багатьма проблемами після версії AS 3.2.
Дивіться останню версію Android Studio та останній плагін Gradle .
Orignal Solution
Прочитавши цю відповідь, ви не застрягнете в проблемах автоматичного генерації прив'язки даних як для класів, так і для змінних даних .
Перевірте ці пункти по одному. Будь-яке з них може зробити вашу роботу готовою. Останній пункт 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. Автоматично згенерована назва класу Binding?
Клас прив'язки даних слід створити після створення макета прив'язки.
Якщо ваше ім'я макета вказано у випадку змії, activity_main.xml
тоді клас прив'язки даних буде сформовано у випадку верблюда, наприклад ActivityMainBinding
.
4. Не бачите пропозицію щодо імпорту?
Іноді, коли ви вводите текст ActivityMai...
, пропозиція не відображається , тоді імпортуйте вручну .
import <yourpackage>databinding.ActivityMainBinding;
5. Прочитайте Logcat збою побудови
Клас прив'язки та нові змінні в макеті не будуть генеровані, якщо збірка не вдається. Отже, спочатку створіть проект за допомогою Ctrl + F9 (Build> Make project) .
- Якщо збірка не вдається, подивіться, що таке помилка, як правило, ми маємо помилки в полях макета. Журнали помилок вказуватимуть номер рядка помилки з проблемою.
- Зв'язування може НЕ в змозі викликати деяку дурну помилку , як помилку синтаксису чи відсутнього імпорт. У цьому випадку ви отримаєте logcat, повний помилок класів прив'язки. Але вам слід прочитати повний журнал, щоб знайти відповідну проблему .
6. Закрити та відкрити проект із недавнього
Я завжди роблю це, тому що це займає набагато менше часу, ніж Rebuild
/ Make
проект.
- Закрити проект у меню Файл> Закрити проект
- Відкрити знову з недавнього
Зауважте, що я віддаю перевагу режиму « Закрити та відкрити» з « Останніх», оскільки це займає набагато менше часу, ніж відновлення / перезапуск IDE .
7. Проект відновлення
Якщо ваш клас ще не створений. (Деякий час, коли ми вставляємо файл макета, це трапляється). Потім відновіть проект з Build> Rebuild
( Не будувати або робити проект ). Він створить ваш клас прив'язки даних. ( Відновлення робить для мене магію. )
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
у вашому макеті, а тип сеттера getter не змінюється, тоді очистіть проект ( Build> Clean Project
)
Заключні слова
Нарешті, якщо ваш клас прив'язки все ще не сформований, ми маємо найпотужнішу зброю. - Перезапустіть Android Studio: D
- По-перше, спробуйте просто перезапустити , це завжди генерує змінні мого макета прив'язки після перезапуску.
- Якщо це не працює, вимкніть кеш і перезапустіть .
Це все, що я роблю для вирішення помилок прив’язки даних. Якщо у вас виникнуть додаткові проблеми, ви можете залишити коментар тут.
dataBinding.enabled
у вашому build.gradle?