Carga de vistas demorada

A veces, el diseño puede requerir vistas complejas que rara vez se usan. Ya sea que se trate de detalles de elementos, 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 ViewStub para esas vistas complejas y poco frecuentes.

Define un 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 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 llama 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 la View aumentada una vez que se completa para que no tengas que llamar a findViewById() si necesitas interactuar con el diseño.

Una vez visible/aumentado, el elemento ViewStub ya no forma 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 el ViewStub es válido solo hasta que el diseño de ViewStub esté visible/aumentado).

Nota: Un inconveniente del ViewStub es que actualmente no admite la etiqueta <merge> en los diseños que se van a aumentar.

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