Si desarrollas Android y no te has pasado a Jetpack Compose (o ni siquiera a Kotlin, y sigues en Java), probablemente tienes en tu código uno o más findViewById(R.id.algo)
. Esta es la forma por defecto de obtener una vista XML en código (para añadir eventos, por ejemplo); pero es muy engorrosa cuando tienes varios elementos.
Por esto, podemos usar "View Binding" para obtener vistas desde código. De esta forma, en lugar de hacer uno o varios findViewById con sus respectivas propiedades Java; solo tendremos una propiedad (o incluso variable en onCreate
para acceder a toda la vista).
Para utilizar esto, hay que seguir los siguientes pasos:
- Activarlo en Gradle.
En el build.gradle
del módulo (dentro de app
), añadimos el siguiente ajuste:
android { namespace ... compileSdk 33 ... viewBinding { enabled = true } }
Solo hay que copiar lo de viewBinding, lo demás está como referencia de dónde se debe colocar. Una vez añadido, resincronizamos Gradle en Android Studio.
- Usarlo en la actividad.
Pongamos que tenemos una MainActivity
que carga un layout activity_main.xml
. Nuestra clase de binding (creada por Android) se llamará ActivityMainBinding
(es decir, como el XML pero con UpperCamelCase y "Binding" al final).
En la actividad, en el onCreate, tendremos que usar el siguiente código:
public class MainActivity extends AppCompatActivity { private ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivityMainBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); } }
Como podemos ver, el setContentView carga la vista desde el binding, y no desde el recurso R.layout.activity_main
.
- A disfrutarlo
Pongamos que tenemos un TextView con el ID miTv
. Podemos modificar el contenido con:
binding.miTv.setText("Hola");
El binding.miTv
es de tipo TextView, con los mismos métodos que tendría TextView
con el findViewById
.