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
}