Kotlin-андроид: неразрешенные ссылки привязки данных

У меня есть следующий класс фрагмента, написанный на Java с использованием новой библиотеки привязки данных

import com.example.app.databinding.FragmentDataBdinding;

public class DataFragment extends Fragment {

    @Nullable
    private FragmentDataBinding mBinding;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data, container, false);
        return mBinding.getRoot();
    }
}

Он компилируется и работает нормально.
Я попытался переписать это в Kotlin и придумал следующее:

import com.example.app.databinding.FragmentDataBdinding

class ProfileFragment : Fragment() {

    private var mBinding: FragmentDataBinding? = null

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data, container, false)
        return mBinding!!.getRoot()
    }
}

Но теперь шаг :app:compileDebugKotlin выводит следующее:

Ошибка: (16, 38) Неразрешенная ссылка: привязка данных
Ошибка: (37, 27) Неразрешенная ссылка: FragmentDataBinding

Как я могу использовать библиотеку android-databinding с Kotlin?

Мой верхний уровень build.gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'com.android.databinding:dataBinder:1.0-rc4'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

Мой build.gradle в build.gradle приложения (только соответствующие части):

apply plugin: 'com.android.application'
apply plugin: 'com.android.databinding'
apply plugin: 'kotlin-android'

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

buildscript {
    ext.kotlin_version = '0.14.451'
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
    }
}
repositories {
    mavenCentral()
    maven {
        url 'http://oss.sonatype.org/content/repositories/snapshots'
    }
}

Я использую Android Studio 1.4, инструменты сборки версии 23.0.1, Android SDK 23, инструменты SDK 24.4.0

Ответ 1

Попробуйте использовать эту конфигурацию:

В главном build.gradle:

buildscript {
    ext.kotlin_version = '<kotlin-version>'
    ext.android_plugin_version = '2.2.0-alpha4'
    dependencies {
        classpath "com.android.tools.build:gradle:$android_plugin_version"
    //... rest of the content
    }
}

Приложение build.gradle:

android {
    dataBinding {
        enabled = true
    }
}

dependencies {
    kapt "com.android.databinding:compiler:$android_plugin_version"
}

kapt {
    generateStubs = true
}

Ответ 2

Я нашел новое решение, надеюсь, оно поможет вам.

Прежде всего, проверьте, применяется ли плагин:

apply plugin: 'kotlin-kapt'

тогда

android {
    ...
    ...
    dataBinding {
        enabled = true
    }
    ...
    ...
}

У вас может быть ошибка в зависимости:

ИСПОЛЬЗОВАТЬ

kapt 'com.android.databinding:compiler:3.0.1'

вместо

compile 'com.android.databinding:compiler:3.0.1'

Вы можете посетить здесь для получения новой версии

Спасибо.

Ответ 3

Версия компилятора Data Binding совпадает с версией gradle в файле build.gradle проекта:

// at the top of file 
apply plugin: 'kotlin-kapt'


android {
  dataBinding.enabled = true
}

dependencies {
  kapt "com.android.databinding:compiler:3.0.0-beta1"
}

и версия gradle

classpath 'com.android.tools.build:gradle:3.0.0-beta1'

Вот пример ссылки для полного использования библиотеки привязки данных в kotlin.

https://proandroiddev.com/modern-android-development-with-kotlin-september-2017-part-1-f976483f7bd6

Ответ 4

Обновление 2: Это действительно старый ответ, вместо этого обратитесь к ответу лрампаццо.

Работает с 1.0-rc4, поставил

kapt 'com.android.databinding:compiler:1.0-rc4' 

в ваши зависимости

Спасибо Гедеон, за ссылку в комментариях

Обновление: Вот действительно простой пример проекта "Здравствуй, мир!"

Ответ 5

Чтобы решить проблему, нужно поставить

apply plugin: 'kotlin-kapt'

в верхней части build.gradle(Module: app), затем поместите эту строку в зависимости

kapt "com.android.databinding:compiler:[YOUR_ANDROID_PLUGIN_VERSION]"

Вы можете найти версию плагина для Android, перейдя в меню

File > Project Structure > Project

Затем снова синхронизируйте. Если вы видите это предупреждение, игнорируйте его.

Сторонние плагины Gradle могут быть причиной

Ответ 6

Попробуйте this.Andrid studio 2.0 (2.1)

В build.gradle

android{
   dataBinding {
        enabled = true
    }
...
}
dependencies {
 kapt 'com.android.databinding:compiler:2.0.0-rc1'
....
}

kapt {
    generateStubs = true
}

В моем проекте: buildToolsVersion = "23.0.3"

в верхнем уровне build.gradle

dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0'
    }

Ответ 7

эта работа для меня в androidStudio ver3.1.3

apply plugin: 'kotlin-kapt'

dataBinding {
    enabled = true
}

show usage sample

Ответ 8

Конфигурация привязки данных в котлине

build.gradle (папка app)

apply plugin: 'kotlin-kapt'

android {
   ...
   dataBinding {
      enabled = true
   }
}

dependencies {
   // data binding
   kapt "com.android.databinding:compiler:3.1.3"
}

Наслаждайтесь Kotlin...

Ответ 9

Добавьте следующее в ваше app build.gradle

kapt "com.android.databinding:compiler:$android_plugin_version"
apply plugin: 'kotlin-kapt' // This one at top where plugin belong to

Это сделает свое дело.

$android_plugin_version - версия com.android.tools.build:gradle в application build.gradle

Также добавьте это в ваш модуль build.gradle

android {///Existing Code kapt { generateStubs = true } }

Ответ 10

Важное обновление

Вы можете увидеть в документации Android.

Новый компилятор в версии 3.2 включен по умолчанию.

Так что просто обновите вашу Android Studio до V3.2 или новее. и удалите все ненужные конфигурации.

Так что просто включите привязку данных на уровне приложения build.gradle.

android {
    dataBinding {
        enabled = true
    }
}

Он будет делать все для вас автоматически.

Вы можете БЕЗОПАСНО УДАЛИТЬ ниже lines-

  • Удалить databinding.compiler

    kapt 'com.android.databinding:compiler:3.0.1'
    
  • Удалить kapt

    kapt {
        generateStubs = true
    }
    

Мой полный конфиг

build.gradle (проект)

kotlin_version = '1.2.71'    
classpath 'com.android.tools.build:gradle:3.2.0'

Используйте Gradle последней версии. Используйте последнюю версию kotlin.

build.gradle (приложение)

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

compileSdkVersion 28
targetSdkVersion 28

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

Важно ! Не просто скопируйте и вставьте конфигурацию. Смотрите этот ответ для настройки Kotlin версии.

gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip

Ответ 11

Добавить привязку данных в Android Project, используя, когда вы используете язык kotlin.

Ниже шаги

--First вам нужно добавить плагин ниже

**apply plugin: 'kotlin-kapt'**

--Second dataBinding включен true

**dataBinding {
        enabled = true
    }**

Все это добавлено в app.build.gradle после нажатия "SYNC NOW".

Например, у вас есть редактировать профиль деятельности, а затем определить переменную привязки в kotlin??

lateinit var buildProfileBinding: ActivityBuildProfileBinding

buildProfileBinding = getBinding()

Здесь get binding - это метод для обработки типа привязываемого объекта.

protected <T extends ViewDataBinding> T getBinding() {
                return (T) binding;
            }

Ответ 12

В моем случае добавление

kapt {
    generateStubs = true
}

Решил проблему для меня. Я проигнорировал это в первый раз, я думал, что это не имеет отношения к проблеме:

Неразрешенная привязка эталонных данных

Но теперь привязка данных работает просто отлично.

Ответ 13

Я хочу поделиться своим собственным опытом. Чтобы использовать привязку данных с Kotlin в Android Studio достаточно добавить

dataBinding {
    enabled = true
}

После этого "синхронизируй" и, что очень важно, "сделай проект". После этого все ваши объекты будут активны для использования.

Ответ 14

В моем случае ошибка была Unresolved reference: RegisterationUserBinding. Я просто использовал свое имя макета fragment_registeration_user, например, FragmentRegisterationUserBinding, и сделал это в макете привязки данных, и ошибка исчезла.