Intereting Posts
Как я могу создать «forEach», который возвращает объект, который является приемником для функции потребления? Почему мы не можем переопределить свойство val как var с get без его инициализации? Пользовательский Сериализатор Джексона делегирует Джексону сериализацию Как обрабатывать доступность в пользовательском представлении, когда он не предназначен для обработки кликов? Вызывать компилятор Kotlin из Java-программы kotlin получить представление из заголовка NavigationView Как превратить inFixed (2) в Kotlin kotlin jvmname игнорируется Gradle? соединение между сеткой и списком. Кнопки доступа из макета, программно раздутые в другом макете Порядок выполнения команд неверен в Kotlin Spek Можно ли использовать функции высокого порядка с необязательными аргументами Как обратиться к анонимному внутреннему классу в Котлине? Доступ к значению параметра по умолчанию для функции в Котлине Gradle kotlin Неподдерживаемый метод Dependencies.getAtoms ()

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(); } } 

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

 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 с 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() } } 

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

 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

Solutions Collecting From Web of "Kotlin-андроид: неразрешенные ссылки привязки данных"

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

В main 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 } 

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

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

 apply plugin: 'kotlin-kapt' 

тогда

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

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

ИСПОЛЬЗОВАНИЕ

 kapt 'com.android.databinding:compiler:3.0.0-alpha5' 

вместо

 compile 'com.android.databinding:compiler:3.0.0-alpha5' 

Спасибо.

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

Он работает с 1.0-rc4, put

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

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

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

Обновление : вот действительно простой пример проекта hello world

Версия компилятора 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" } 

и версия градиента

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

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

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

Попробуйте 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' }