Implementar ViewBinding en Android con Kotlin


Como novedad en Android Studio 3.6, introdujo la vinculación de vistas (ViewBinding) que viene a facilitar el acceso a los elementos declarados en una vista XML.

Para saber más sobre la vinculación de vista, documentación oficial

Habilitar la vinculación de vistas

La vinculación de vista se habilita módulo por módulo. Para habilitar la vinculación de vista en un módulo, agrega el elemento viewBinding a su archivo build.gradle, como se muestra en el siguiente ejemplo:

// Android Studio 4.0
android {
   ...
   buildFeatures {
       viewBinding = true
   }
}   

Una vez habilitado para un proyecto, la vinculación de vista generará una clase de enlace para todos sus diseños automáticamente. No es necesario que realice cambios en su XML; funcionará automáticamente con sus diseños existentes.

Puede usar la clase de enlace siempre que infle diseños como Fragmento, Actividad o incluso un Adaptador RecyclerView (o ViewHolder).

Las propiedades de usar vinculación de vista sobre los otros métodos de asignación de vistas

  • Seguridad nula las propiedades siempre se asignan correctamente del tipo en función de las vistas en el diseño. Entonces, si coloca un TextView en el diseño, el enlace de vista expondrá una propiedad TextView.
  • Seguridad de tipos para diseños definidos en múltiples configuraciones. La vinculación de vista detectará si una vista solo está presente en algunas configuraciones y creará una propiedad

Usar el enlace de vista en una actividad

Si tiene un disñeo llamado activity_main.xml, que contiene un botón y dos vistas de texto, el modulo de vinculación de vista genera una pequeña clase llamada ActivityMainBinding que contiene una propiedad para cada vista con un ID en el diseño.

// Usar view binding en un Activity
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val binding = ActivityMainBinding.inflate(layoutInflater)

    binding.tv1.text = "Bienvenido"
    binding.tv2.text = "Hello word"
    binding.button.setOnClickListener { /* @todo click */ }

    setContentView(binding.root)
}

Con la vinculación de vista no es necesario recurrir aa findViewById , solo use las propiedades proporcionadas para hacer referencia a cualquier vista en el diseño con una identificación.

¿Qué pasa con los diseños incluidos?

En el caso de diseños incluidos, el enlace de vista creará una referencia al objeto de enlace del diseño incluido. Pero requiere asignarle un identificador para hacer referencia

    <include android:id="@+id/include1" layout="@layout/contain_main"

Para aceder a los elementos vinculados se parte de binding.include1.propiedad_vista

Usar el enlace de vista en un fragmento

Hay dos métodos para usar View Binding dentro los fragmentos

  • Inflate: realizar el inflado del diseño y el enlace dentro del método onCreateView.
  • Bind: utiliza un constructor alternativo del Fragment() que infla el diseño y realiza el enlace dentro del método onViewCreated

Método inflate

En el método onCreateView, infle su archivo de diseño y cree la instancia de enlace:

class MainInflateFragment : Fragment() {

    private var _binding: FragmentMainBinding? = null
    private val binding get() = _binding!!

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
        _binding = FragmentContactListBinding.inflate(inflater, container, false)
        return binding.root
    }
  
}

Debido a que los fragmentos continúan vivos después de que la vista se ha ido, es bueno eliminar cualquier referencia a la instancia de la clase vinculante:

 override fun onDestroyView() {
        fragmentDemoBinding = null
        super.onDestroyView()
    }

Para usar las vistas se puede usar la variable binding

Método bind

En construcción

Recursos

Anuncio publicitario

Publicado por Codelaby

Mobile DevDesigner

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: