ViewStubの使い方

2017/09/14

AndroidにはViewStubという特殊なViewがあります。

Delayed Loading of Views | Android Developers

ViewStub is a lightweight view with no dimension that doesn’t draw anything or participate in the layout.

とあるように、ViewStubは『幅も高さも持たず、レイアウト計算や画面描画の対象外となる軽量なView』です。inflate() もしくは setVisibility() を呼び出したタイミングで実体のViewがinflateされ、ViewStubと置き換えられます。

逆に言うとinflateするまではレイアウト計算の対象にならないので、複雑だけどたまにしか使わないViewに適用すると不要な計算を行わなくなってパフォーマンスが向上する、という算段です。

使い方は簡単。普通のViewと同じように定義できます。

<ViewStub
    android:id="@+id/stub"
    android:inflatedId="@+id/inflated"
    android:layout="@layout/inflate_layout"
/>

android:idはViewStub自身のID、android:inflatedIdはinflate後にViewStubと置き換えられるViewのIDになります。

inflateするコードは以下の3パターン。

ViewStub viewStub = (ViewStub) findViewById(R.id.stub);

// パターン1
viewStub.setVisiblity(View.VISIBLE);

// パターン2
View inflatedView = viewStub.inflate();

// パターン3
viewStub.setLayoutResource(R.layout.inflate_layout);
viewStub.inflate();

パターン3では読み込むレイアウトをXMLのandroid:layoutで指定するのではなく、コードで指定しています。何らかの条件に基づいて読み込むレイアウトを変えたい場合に使えます。

参考URL




関連(するかもしれない)記事


おススメ