En los mismos casos, el estudio de Android muestra un mensaje de advertencia cuando llamo al método de observe del objeto LiveData
viewModel.emailValidationResult.observe(viewLifecycleOwner, {onEmailChanged(it)})La resolución del candidato se cambiará pronto, utilice un nombre completamente calificado para invocar explícitamente al siguiente candidato más cercano:
public open fun observe(propietario: LifecycleOwner, observador: Observer<in Int?>): Unidad definida en androidx.lifecycle.LiveData
Según tengo entendido, sucedió después de actualizar kotlin 1.4 ¿Qué significa realmente?
La extensión de AndroidX está obsoleta, por lo que debemos usar la original.
Quitar import androidx.lifecycle.observe
luego
viewModel.liveData.observe(viewLifecycleOwner, Observer { result -> })o
viewModel.liveData.observe(viewLifecycleOwner) { result -> }El mismo problema también ocurrió en mi base de código. La versión de kotlin es '1.4.32'
Después de eliminar el sentimiento de importación a continuación, la advertencia desapareció.
import androidx.lifecycle.observeIntenté eliminar "importar androidx.lifecycle.observe" y convertí a nuestros observadores de la siguiente manera:
// From this livedata.observe(viewLifecycleOwner, Observer<MyClass?> { // do stuff with it }) // To this livedata.observe(viewLifecycleOwner) { // do stuff with it }El problema ocurrió cuando necesitamos eliminar el observador dentro de la llamada onChange, por ejemplo
// From this livedata.observe(viewLifecycleOwner, object : Observer<MyClass?> { override fun onChanged(t: MyClass?) { // Do stuff with it t livedata.removeObserver(this) } }) // To this livedata.observe(viewLifecycleOwner) { // do stuff with it livedata.removeObserver(this) <--- not working ofc }Escuché rumores de que la gente ha desglosado el observador como una variable y, por lo tanto, ha podido agregarlo o eliminarlo haciendo referencia a la variable. Sin embargo, no puedo averiguar cómo crear una instancia de un observador local sin usar la sintaxis "Observer<MyClass?>.
En mi caso, utilicé Kotlin 1.4.31 en el archivo buildgradle (nivel de proyecto).
ext { kotlin_version = '1.4.31' } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" }El error de advertencia/desaprobación desapareció.
Significa que la extensión en androidx ya no es necesaria.
Simplemente elimine su import import androidx.lifecycle.observe .
En realidad, quedará obsoleto en androidx. Lea más razonamiento allí.
EDITAR:
Tenga en cuenta el "problema" de Erik Hoogendoorn
Este cambio hace que los valores del objeto LiveData observado se interpreten como anulables (dado que la sintaxis lambda convertida se basa en código Java anulable). Este no fue el caso de la extensión de Kotlin y provoca una pérdida de funcionalidad para el usuario. En mi opinión, este cambio debería revertirse y encontrar una solución diferente.
Tengo curiosidad por saber si cambiarán el nombre y conservarán el ayudante o si encontrarán otra solución.