Saltar al contenido

ViewBinding vs Kotlin Extensiones de Android con vistas sintéticas

Solución:

Repasemos los dos.


Configuración

Extensiones de Android Kotlin

  1. Importe extensiones sintéticas de diseño adecuadas: import kotlinx.android.synthetic.main..*
  2. Vistas de referencia en código a través de sus identificadores: textView.text = "Hello, world!". Estas extensiones funcionan en: Activities, Fragments y Views.

Ver encuadernación

  1. Cree una referencia vinculante dentro de su clase: private lateinit var binding
    YourClassBinding
  2. Infle su encuadernación binding = YourClassBinding.inflate(layoutInflater) dentro Activity‘s onCreate y llama setContentView(binding.root)o inflarlo en Fragment‘s onCreateView luego devuélvelo: return binding.root
  3. Vistas de referencia en el código a través del enlace usando sus identificadores binding.textView.text = "Hello, world!"

Tipo de seguridad

Extensiones de Android Kotlin y ViewBinding son seguros para los tipos por definición, porque las vistas referenciadas ya están convertidas en los tipos adecuados.


Seguridad nula

Extensiones de Android Kotlin y ViewBinding son ambos null a salvo. ViewBinding no tiene ninguna ventaja aquí. En caso de KAE, si la vista está presente solo en algunas configuraciones de diseño, IDE se lo indicará:

ingrese la descripción de la imagen aquí

Así que simplemente trátelo como cualquier otro tipo anulable en Kotlin, y el error desaparecerá:

ingrese la descripción de la imagen aquí


Aplicar cambios de diseño

En caso de Extensiones de Android Kotlin, los cambios de diseño se traducen instantáneamente en la generación de extensiones sintéticas, para que pueda usarlas de inmediato. En caso de ViewBinding, tienes que construir tu proyecto


Uso de diseño incorrecto

En caso de Extensiones de Android Kotlin, es posible importar extensiones sintéticas de diseño incorrecto, lo que provoca NullPointerException. Lo mismo se aplica a ViewBinding, ya que podemos importar mal Binding clase. Aunque, es más probable pasar por alto la importación incorrecta que el nombre de clase incorrecto, especialmente si el archivo de diseño tiene un buen nombre Activity/Fragment/View, asi que ViewBinding tiene ventaja aquí.


Resumen de KAE vs ViewBinding

  • Tipo de seguridad – Dibujar.
  • Seguridad nula – Dibujar.
  • Código repetitivoKAE gana. De la documentación de Kotlin Android Extensions:

El complemento Kotlin Android Extensions nos permite obtener la misma experiencia que tenemos con algunas de estas bibliotecas, sin tener que agregar ningún código extra.

  • Aplicar cambios de diseñoKAE gana. Los cambios son instantáneos en contraste con ViewBinding.
  • Uso de diseño incorrectoViewBinding gana

Creo que existe un gran error sobre ViewBinding siendo reemplazo de KAE. La gente escucha palabras clave grandes y las repite sin verificarlo de antemano. Seguro, ViewBinding es la mejor opción para el desarrollo de Java en este momento (reemplazo de Cuchillo de mantequilla), pero hay poca o ninguna ventaja sobre KAE en Kotlin (ver Uso de diseño incorrecto sección).

Nota al margen:
Estoy seguro de que a la gente de DataBinding le gustará ViewBinding 🙂

ViewBinding resuelto el mayor problema de kotlinx.android.synthetic. En synthetic vinculante si configura su vista de contenido en un diseño, luego escribe una identificación que solo existe en un diseño diferente, el IDE le permite autocompletar y agregar la nueva declaración de importación. A menos que el desarrollador verifique específicamente que sus declaraciones de importación solo importen las vistas correctas, no hay una forma segura de verificar que esto no cause un problema de tiempo de ejecución. Pero en ViewBinding deberías usar tu layout vinculando el objeto para acceder a sus vistas para que nunca invoque a una vista en un diseño diferente y si desea hacer esto, obtendrá un error de compilación, no un error de tiempo de ejecución. Aquí hay un ejemplo.

Creamos dos diseños llamados activity_main y activity_other al igual que :

activity_main.xml



    


activity_other.xml



    


Ahora bien, si escribe su actividad así:

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_other.*

class MainActivity : AppCompatActivity() 

    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //Application will crash because "message_other" doesn't exist in "activity_main"
        message_other.text = "Hello!"
    

su código se compilará sin ningún error, pero su aplicación se bloqueará en tiempo de ejecución. Porque la vista con message_other id no existe en activity_main y el compilador no comprobó esto. Pero si usas ViewBinding al igual que:

class MainActivity : AppCompatActivity() 
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        //This code will never compile and the IDE shows you an error
        binding.message_other.text = "Hello!"
    

tu código nunca se compilará y Android Studio muestra un error en la última línea.

kotlinx.android.synthetic ya no es una práctica recomendada, dijo Google en un mensaje de confirmación “uno de los hilos de Reddit

https://android-review.googlesource.com/c/platform/frameworks/support/+/882241 “

Sintéticos no está desarrollado por Google, es parte de la extensión de Android Kotlin diseñada por JetBrains y gradualmente los desarrolladores de Android de Google comenzaron a reemplazar Synthetics con ViewBindins en sus demostraciones y códigos fuente.

“Ahora viene la pregunta, cuál tenemos que tomar en consideración”.

Según Google (View binding, ButterKnife, Kotlin Synthetics), muchas aplicaciones utilizan estas bibliotecas con éxito y resuelven el mismo problema.

Pero para la mayoría de las aplicaciones, Google recomienda probar el enlace de vista en lugar de estas bibliotecas Porque el enlace de vista proporciona una búsqueda de vista más segura y concisa.

Imagen de referencia adjunta para aclarar las cosas rápidamente.
ingrese la descripción de la imagen aquí

Sin embargo, si desea profundizar, puede seguir el enlace que se proporciona a continuación. https://medium.com/androiddevelopers/use-view-binding-to-replace-findviewbyid-c83942471fc

Si posees alguna indecisión o disposición de mejorar nuestro escrito eres capaz de realizar un exégesis y con deseo lo ojearemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *