Android - DataBinding - Как и когда будут созданы классы привязки?
Руководство по DataBinding Государства
By default, a Binding class will be generated based on the name of the layout
file, converting it to Pascal case and suffixing "Binding" to it.
The above layout file was activity_main.xml so the generate class was ActivityMainBinding.
Когда будет сгенерирован класс Binding, здесь вызывается ActivityMainBinding. У меня есть ошибка времени компиляции. "не может разрешить ActivityMainBinding".
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
Любая помощь приветствуется. Спасибо
Ответы
Ответ 1
Каково ваше имя макета?
В приведенном выше файле макета был activity_main.xml, поэтому класс generate был ActivityMainBinding.
Это означает, что имя сгенерированного класса будет зависеть от имени вашего макета
activity_main.xml → ActivityMainBinding.java
Я думаю, что ваше название деятельности - "main_activity", поэтому имя сгенерированного имени связывания должно быть MainActivityBinding not ActivityMainBinding
Ответ 2
Когда он не генерирует класс привязки, я перезапускаю студию Android. Затем будет создан класс привязки. Разве это не вызвано кешем android studio?
Кстати, если вы используете android-apt
, проверьте его. Потому что это приведет к тому, что класс привязки не будет создан.
Ответ 3
Вы обновили файл макета для привязки данных? Они генерируются только для макетов, имеющих привязку данных.
Он должен начинаться с тега layout
, который имеет 2 дочерних тега (данные и ваш корневой вид).
Что-то вроде этого:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="user" type="com.example.User"/>
</data>
<LinearLayout ...
</LinearLayout>
Когда ваш макет имеет такую форму, AndroidStudio должен автоматически завершить класс. Кроме того, по умолчанию он создается в пакете <your.app.package>.databinding
.
Ответ 4
Попробуйте переименовать макет на main_activity.xml
.
В моем случае это не сработало для создания класса привязки для "activity_main.xml".
Но переименование файла макета на main_activity.xml
работало нормально.
Ответ 5
Убедитесь, что расположение:
<data>
<variable name="user" type="com.example.User"/>
</data>
находится в activity_main.xml, если вы ищете ActivityMainBinding. В большинстве проектов с шаблонами вы настроите свой контентный вид на activity_main.xml, но затем раздуйте файл fragment_main.xml.
Если вы поместите свой <data>
в макет fragment_main.xml, тогда создаваемый класс будет FragmentMainBinding.
Примечание. Это может показаться очевидным после прочтения, но это то, что можно легко упустить, следуя документации по Android.
Ответ 6
Если вы когда-либо хотели указать свое собственное имя класса Binding, просто добавьте атрибут class
к элементу data
с именем класса
Классы привязки могут быть переименованы или помещены в разные пакеты, настроив атрибут класса элемента данных.
<data class="ContactItem">
...
</data>
<data class="com.example.ContactItem">
...
</data>
happyCoding;
Ответ 7
В моем случае перезагрузка Android Studio работает. Это ошибка в android-apt
Ответ 8
Для корректной работы привязки android необходимо использовать инструменты для Android для gradle (com.android.tools.build: gradle) >= 1.3.0.
Итак, ваш проект build.gradle должен выглядеть так:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
classpath "com.android.databinding:dataBinder:1.0-rc1"
}
}
allprojects {
repositories {
jcenter()
}
}
И модуль build.gradle должен иметь этот плагин:
apply plugin: 'com.android.databinding'
В конце концов, проверьте в своем модуле, что вы используете последнюю версию buildToolsVersion (сейчас это 22.0.1). Я не уверен, что это необходимо, но это, возможно, заставит вас почувствовать себя хорошо, когда вы находитесь на "кровоточащей грани технологии" ^ _ ^:
buildToolsVersion '22.0.1'
Resync gradle и перестроить проект. Возможно, что без восстановления проекта вы не сможете получить SomeLayoutBinding
классы.
В Android Studio, который можно сделать из меню приложения: Build -> Rebuild project
Ответ 9
Просто простой перезапуск не работал у меня. Я должен был Invalidate Caches and Restart
, тогда я мог видеть классы привязки. Он находится в меню File
для тех, кто этого не знает.
Ответ 10
Столкнулась с той же проблемой.
Причина "не может разрешить ActivityMainBinding" заключается в том, что ваш Binding файл не сгенерирован. Попробуйте очистить и перестроить проект.
Также убедитесь, что вы выполнили следующие шаги:
- classpath "com.android.databinding: dataBinder: 1.0-rc4" → включить это в файл основного модуля
- применить плагин: 'com.android.databinding' к вашему модулю приложения, который вы строите
- Clean
- Перестроить. Проверьте, если build- > indermediates- > имя вашего пакета- > папка привязки данных, содержащая класс ActivityMainBinding.
Альтернативно, если вы хотите увидеть сгенерированный источник.
- classpath 'com.neenbedankt.gradle.plugins: android-apt: 1.7' → применимо к вашему основному модулю.
- применить плагин: 'com.neenbedankt.android-apt' → к вашему модулю приложения
- apt 'com.android.databinding: компилятор: 1.0-rc0' → включить в ваши зависимости.
Эти классы будут сгенерированы при первой сборке.
Также убедитесь, что applicationId в вашем прикладном модуле совпадает с именем пакета в AndroidManifest.xml вашего модуля приложения.
Надеюсь, это поможет.
Ответ 11
Странная "ошибка" в android-studio заставляет сгенерированный файл BR.java не использовать поля @Bindable
и по-прежнему имеет свойство _all
, если каталог res/layout не существует.
Это случилось со мной, когда я захотел создать приложение "Нет активности", чтобы иметь библиотеку, содержащую мои разные данные с возможностью связывания.
Ответ 12
В моем случае я просто приложил свой макет xml в тегах <layout></layout>
и что он, не добавляя тег данных, мне удалось создать Data Bindings. Надеюсь, это поможет.
<data>
<variable name="user" type="com.example.User"/>
</data>
Ответ 13
<data class="MainActivityBinding">
<variable
name="user"
type="com.example.administrator.my_mvvm.User" />
</data>
//Помню, что нужно
Build- > Rebuild Project