studio databinding java android kotlin android-databinding

java - databinding kotlin android studio



Kotlin-android: enlace de datos de referencia sin resolver (14)

Tengo la siguiente clase de fragmento escrita en Java usando la nueva biblioteca de enlace de datos

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

Se compila y funciona bien.
Traté de reescribirlo en Kotlin y se me ocurrió lo siguiente:

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

Pero ahora paso :app:compileDebugKotlin genera lo siguiente:

Error: (16, 38) Referencia sin resolver: enlace de datos
Error: (37, 27) Referencia sin resolver: FragmentDataBinding

¿Cómo puedo usar la biblioteca de enlace de datos de Android con Kotlin?

Mi build.gradle nivel 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() } }

Mi build.gradle en el directorio de la aplicación (solo partes relevantes):

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'' } }

Estoy usando Android Studio 1.4, Build tools versión 23.0.1, Android SDK 23, SDK tools 24.4.0


Actualización importante

Puedes ver en la documentación de Android.

El nuevo compilador en la versión 3.2 está habilitado de forma predeterminada.

Así que solo actualice su Android Studio a V3.2 o newer . y elimine toda la configuración innecesaria.

Entonces, solo habilite dataBinding en el nivel de aplicación build.gradle .

android { dataBinding { enabled = true } }

Hará todas las cosas por usted automáticamente.

PUEDE ELIMINAR CON SEGURIDAD las siguientes líneas:

  • Eliminar databinding.compiler

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

  • Eliminar kapt

    kapt { generateStubs = true }

Mi configuración completa

build.gradle (Proyecto)

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

Utiliza la última versión de gradle . Use la última versión de kotlin .

build.gradle (aplicación)

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"

Importante No solo copie y pegue la configuración. Consulte esta respuesta para configurar la versión de Kotlin.

gradle-wrapper.properties

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


Actualización 2: Esta es una respuesta muy antigua, en cambio, consulte la respuesta de lrampazzo.

Funciona con 1.0-rc4, pon

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

en tus dependencias

Gracias Ghedeon, por el enlace en los comentarios.

Actualización : Here''s un proyecto de ejemplo de hello world realmente simple


Agregue Databinding en Android Project usando cuando haya usado el lenguaje kotlin.

A continuación los pasos

--Primero necesita agregar el complemento a continuación

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

--Segundo enlace de datos habilitado verdadero

**dataBinding { enabled = true }**

Todo este punto agregado en app.build.gradle después de presionar "SINCRONIZAR AHORA"

Permite, por ejemplo, editar actividad de perfil, ¿cómo definir la variable de enlace en kotlin?

lateinit var buildProfileBinding: ActivityBuildProfileBinding buildProfileBinding = getBinding()

Aquí, obtener enlace es un método para manejar qué tipo de objeto de enlace

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


Agregue seguimiento en su app build.gradle

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

Esto hará el truco.

$android_plugin_version es la versión de com.android.tools.build:gradle en la application build.gradle

Además, agregue esto a su módulo build.gradle

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


En mi caso, agregando

kapt { generateStubs = true }

Resolvió el problema para mí. Lo ignoré la primera vez, pensé que era irrelevante para el problema:

Enlace de datos de referencia sin resolver

Pero ahora, el enlace de datos funciona bien.


En mi caso, el error fue Unresolved reference: RegisterationUserBinding Acabo de usar mi nombre de diseño fragment_registeration_user como este FragmentRegisterationUserBinding y lo hice en el diseño de Databinding y el error desapareció.


Encontré una nueva solución, espero que te ayude.

En primer lugar, compruebe si se aplica el complemento:

apply plugin: ''kotlin-kapt''

entonces

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

Es posible que tenga un error en la dependencia:

UTILIZAR

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

en vez de

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

Gracias.


Enlace de datos de configuración en kotlin

build.gradle (aplicación de carpeta)

apply plugin: ''kotlin-kapt'' android { ... dataBinding { enabled = true } } dependencies { // data binding kapt "com.android.databinding:compiler:3.1.3" }

Disfruta Kotlin ...


Intenta usar esta configuración:

En build.gradle principal:

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

App build.gradle :

android { dataBinding { enabled = true } } dependencies { kapt "com.android.databinding:compiler:$android_plugin_version" } kapt { generateStubs = true }


La versión del compilador de enlace de datos es la misma que la versión gradle en el archivo build.gradle de su proyecto:

// at the top of file apply plugin: ''kotlin-kapt'' android { dataBinding.enabled = true } dependencies { kapt "com.android.databinding:compiler:3.0.0-beta1" }

y la versión gradle es

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

Aquí hay un enlace de ejemplo para completar el uso de la biblioteca de enlace de datos en kotlin.

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


Para resolver el problema, tienes que poner

apply plugin: ''kotlin-kapt''

en la parte superior de build.gradle (Módulo: aplicación), luego ponga esta línea en dependencias

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

Puede encontrar la versión del complemento de Android yendo al menú

File > Project Structure > Project

Luego sincronice nuevamente. Si ve esta advertencia, ignórela.

Los complementos de Gradle de terceros pueden ser la causa


Prueba esto.Andrid studio 2.0 (2.1)

En build.gradle

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

En mi proyecto: buildToolsVersion = "23.0.3"

en el nivel superior build.gradle

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


Quiero compartir mi propia experiencia. Para usar el enlace de datos con Kotlin en Android Studio es suficiente agregar

dataBinding { enabled = true }

Después de eso "sincronízalo" y, es muy importante, "hacer Project". Después de eso, todo su objeto estará activo para usar.


esto funciona para mí en androidStudio ver3.1.3

apply plugin: ''kotlin-kapt'' dataBinding { enabled = true }