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