Cómo retrasar la carga de las vistas

A veces, el diseño puede requerir vistas complejas que rara vez se usan. Ya sea que se trate de detalles del elemento, indicadores de progreso o mensajes de deshacer, puedes reducir el uso de memoria y acelerar el procesamiento cargando las vistas solo cuando son necesarias.

Aplazar los recursos de carga es una técnica importante para usar cuando tienes vistas complejas que tu app podría necesitar en el futuro. A fin de implementar esta técnica, define un elemento ViewStub para esas vistas complejas y poco utilizadas.

Define un elemento ViewStub

ViewStub es una vista liviana sin dimensiones que no dibuja nada ni participa en el diseño. Por eso, aumentarlo y dejarlo en una jerarquía de vistas es de bajo costo. Cada ViewStub simplemente debe incluir el atributo android:layout para especificar el diseño que se va a aumentar.

El siguiente ViewStub es para una superposición translúcida de la barra de progreso. Debe ser visible solo cuando se importan elementos nuevos a la app.

<ViewStub
    android:id="@+id/stub_import"
    android:inflatedId="@+id/panel_import"
    android:layout="@layout/progress_overlay"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom" />

Carga el diseño de ViewStub

Cuando desees cargar el diseño especificado por el ViewStub, establece su visibilidad llamando a setVisibility(View.VISIBLE) o a inflate().

Kotlin

findViewById<View>(R.id.stub_import).visibility = View.VISIBLE
// or
val importPanel: View = findViewById<ViewStub>(R.id.stub_import).inflate()

Java

findViewById(R.id.stub_import).setVisibility(View.VISIBLE);
// or
View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();

Nota: El método inflate() muestra el valor aumentado View una vez que se completa, por lo que no es necesario que llames a findViewById() si necesitas interactuar con el diseño.

Una vez visible/aumentado, el elemento ViewStub deja de formar parte de la jerarquía de vistas. Se reemplaza con el diseño aumentado, y el ID de la vista raíz de ese diseño es el especificado por el atributo android:inflatedId de ViewStub. (El ID android:id especificado para ViewStub solo es válido hasta que el diseño de ViewStub esté visible/aumentado).

Nota: Una desventaja de ViewStub es que actualmente no admite la etiqueta <merge> en los diseños que se deben aumentar.

Para obtener información adicional sobre este tema, consulta Optimiza con stubs (entrada de blog).