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