ViewStub es una View invisible y con tamaño nulo que puede utilizarse para inicializar (inflate) recursos de layout cuando éstos se vayan a utilizar (lazily) y no antes. Esto aumenta la eficiencia en el uso de los recursos de la App.
Cuando un ViewStub se hace visible o cuando la función inflate() es invocada, el recurso de Layout se inicializa.
En ese momento, el ViewStub se reemplaza a sí mismo en el Padre por el Layout inicializado. Estas Views deben estar contenidas en un archivo de Layout propio y se define el Layout con el atributo android:layout.
ViewStub solo vive hasta que setVisibility(int) o inflate() son invocadas. La View inicializada se añade al padre con los parámetros de Layout que ViewStub tuviera.
Se puede definir el ID de la View inicializada utilizado la propiedad android:inflatedId.
EJEMPLO
A continuación vamos a utilizar el Layout que hemos utilizado en la entrada de ViewPager2 y lo vamos a inicializar al pulsar un botón.
Para ello necesitamos desarrollar 3 archivos:
MainActivity.kt
activity_main.xml
page_inflatable.xml
Empezamos con el desarrollo del page_inflatable.xml. En este archivo de Layout se va a añadir el contenido que se inicializará tras pulsar el botón. Es un Layout reutilizado de la entrada antes mencionada:
Básicamente muestra la imagen de James Sunderland, el sexo, el juego en el que participa como personaje y un texto de ejemplo donde estaría la descripción.
Después desarrollamos el activity_main.xml. En este archivo lo que se va a definir es un ViewStub y un botón que cuando se pulse inicializará el Layout definido en el ViewStub.
Es un atributo fundamental del ViewStub ya que hace referencia al archivo de Layout que se debe inicializar.
Por último desarrollamos un listener en el MainActivity.kt que le diga al botón que al ser pulsado infle o inicialice el Layout y cambie su visibilidad a GONE para no afectar al Layout que se acaba de inicializar: