Carica visualizzazioni on demand

A volte il layout richiede visualizzazioni complesse che vengono utilizzate raramente. Indica se sono dettagli elemento, indicatori di avanzamento o annullare messaggi, puoi ridurre memoria utilizzata e velocizza il rendering caricando le visualizzazioni solo quando necessaria.

Puoi rimandare il caricamento delle risorse quando hai visualizzazioni complesse che la tua app per soddisfare le esigenze future definendo una ViewStub per viste complesse e usate raramente.

Definisci una finestra di visualizzazione

ViewStub è una visualizzazione leggera senza dimensione disegnare qualsiasi cosa o partecipare al layout. Di conseguenza, richiede poche risorse a gonfiare e lasciare in una gerarchia di visualizzazione. Ogni ViewStub include l'attributo android:layout per specificare il layout da aumentare in modo artificioso.

Supponi di avere un layout che vuoi caricare in un secondo momento nel percorso dell'utente del tuo dell'app:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:src="@drawable/logo"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</FrameLayout>

Puoi posticipare il caricamento utilizzando il seguente ViewStub. Per rendere mostra o carica qualcosa, devi mostrare il layout suggerito:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent">

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

Carica il layout ViewStub

Gli snippet di codice nella sezione precedente producono qualcosa come la figura 1:

L&#39;immagine di uno schermo vuoto
. Figura 1. Stato iniziale della schermata: ViewStub è nascondendo il layout pesante.

Quando vuoi caricare il layout specificato dall'ViewStub, impostala su visibile chiamando setVisibility(View.VISIBLE) o chiama inflate().

Il seguente snippet di codice simula un caricamento posticipato. La schermata viene caricata solito in Activity e onCreate(), poi compare il layout heavy_layout_we_want_to_postpone:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_old_xml)

  Handler(Looper.getMainLooper())
      .postDelayed({
          findViewById<View>(R.id.stub_import).visibility = View.VISIBLE
          
          // Or val importPanel: View = findViewById<ViewStub>(R.id.stub_import).inflate()
      }, 2000)
}

Java

@Override
void onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_old_xml);

  Handler(Looper.getMainLooper())
      .postDelayed({
          findViewById<View>(R.id.stub_import).visibility = View.VISIBLE
          
          // Or val importPanel: View = findViewById<ViewStub>(R.id.stub_import).inflate()
      }, 2000);
}
. Figura 2. Il layout pesante è visibile.
di Gemini Advanced.
.

Una volta visibile o gonfiato, l'elemento ViewStub non fa più parte della gerarchia delle viste. Viene sostituito dal layout gonfiato e dall'ID per il valore la vista principale di quel layout sia specificata dallo android:inflatedId di ViewStub. L'ID android:id specificato per ViewStub è valido solo fino alla ViewStub il layout sia visibile o gonfiato.

Per ulteriori informazioni su questo argomento, vedi il post del blog Ottimizzazione con stub.