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).