FileDocCategorySizeDatePackage
ViewStub.javaAPI DocAndroid 5.1 API11317Thu Mar 12 22:22:10 GMT 2015android.view

ViewStub

public final class ViewStub extends View
A ViewStub is an invisible, zero-sized View that can be used to lazily inflate layout resources at runtime. When a ViewStub is made visible, or when {@link #inflate()} is invoked, the layout resource is inflated. The ViewStub then replaces itself in its parent with the inflated View or Views. Therefore, the ViewStub exists in the view hierarchy until {@link #setVisibility(int)} or {@link #inflate()} is invoked. The inflated View is added to the ViewStub's parent with the ViewStub's layout parameters. Similarly, you can define/override the inflate View's id by using the ViewStub's inflatedId property. For instance:
<ViewStub android:id="@+id/stub"
android:inflatedId="@+id/subTree"
android:layout="@layout/mySubTree"
android:layout_width="120dip"
android:layout_height="40dip" />
The ViewStub thus defined can be found using the id "stub." After inflation of the layout resource "mySubTree," the ViewStub is removed from its parent. The View created by inflating the layout resource "mySubTree" can be found using the id "subTree," specified by the inflatedId property. The inflated View is finally assigned a width of 120dip and a height of 40dip. The preferred way to perform the inflation of the layout resource is the following:
ViewStub stub = (ViewStub) findViewById(R.id.stub);
View inflated = stub.inflate();
When {@link #inflate()} is invoked, the ViewStub is replaced by the inflated View and the inflated View is returned. This lets applications get a reference to the inflated View without executing an extra findViewById().
attr
ref android.R.styleable#ViewStub_inflatedId
attr
ref android.R.styleable#ViewStub_layout

Fields Summary
private int
mLayoutResource
private int
mInflatedId
private WeakReference
mInflatedViewRef
private LayoutInflater
mInflater
private OnInflateListener
mInflateListener
Constructors Summary
public ViewStub(android.content.Context context)


       
        initialize(context);
    
public ViewStub(android.content.Context context, int layoutResource)
Creates a new ViewStub with the specified layout resource.

param
context The application's environment.
param
layoutResource The reference to a layout resource that will be inflated.

        mLayoutResource = layoutResource;
        initialize(context);
    
public ViewStub(android.content.Context context, android.util.AttributeSet attrs)

        this(context, attrs, 0);
    
public ViewStub(android.content.Context context, android.util.AttributeSet attrs, int defStyleAttr)

        this(context, attrs, defStyleAttr, 0);
    
public ViewStub(android.content.Context context, android.util.AttributeSet attrs, int defStyleAttr, int defStyleRes)

        TypedArray a = context.obtainStyledAttributes(
                attrs, com.android.internal.R.styleable.ViewStub, defStyleAttr, defStyleRes);

        mInflatedId = a.getResourceId(R.styleable.ViewStub_inflatedId, NO_ID);
        mLayoutResource = a.getResourceId(R.styleable.ViewStub_layout, 0);

        a.recycle();

        a = context.obtainStyledAttributes(
                attrs, com.android.internal.R.styleable.View, defStyleAttr, defStyleRes);
        mID = a.getResourceId(R.styleable.View_id, NO_ID);
        a.recycle();

        initialize(context);
    
Methods Summary
protected voiddispatchDraw(android.graphics.Canvas canvas)

    
public voiddraw(android.graphics.Canvas canvas)

    
public intgetInflatedId()
Returns the id taken by the inflated view. If the inflated id is {@link View#NO_ID}, the inflated view keeps its original id.

return
A positive integer used to identify the inflated view or {@link #NO_ID} if the inflated view should keep its id.
see
#setInflatedId(int)
attr
ref android.R.styleable#ViewStub_inflatedId

        return mInflatedId;
    
public LayoutInflatergetLayoutInflater()
Get current {@link LayoutInflater} used in {@link #inflate()}.

        return mInflater;
    
public intgetLayoutResource()
Returns the layout resource that will be used by {@link #setVisibility(int)} or {@link #inflate()} to replace this StubbedView in its parent by another view.

return
The layout resource identifier used to inflate the new View.
see
#setLayoutResource(int)
see
#setVisibility(int)
see
#inflate()
attr
ref android.R.styleable#ViewStub_layout

        return mLayoutResource;
    
public Viewinflate()
Inflates the layout resource identified by {@link #getLayoutResource()} and replaces this StubbedView in its parent by the inflated layout resource.

return
The inflated layout resource.

        final ViewParent viewParent = getParent();

        if (viewParent != null && viewParent instanceof ViewGroup) {
            if (mLayoutResource != 0) {
                final ViewGroup parent = (ViewGroup) viewParent;
                final LayoutInflater factory;
                if (mInflater != null) {
                    factory = mInflater;
                } else {
                    factory = LayoutInflater.from(mContext);
                }
                final View view = factory.inflate(mLayoutResource, parent,
                        false);

                if (mInflatedId != NO_ID) {
                    view.setId(mInflatedId);
                }

                final int index = parent.indexOfChild(this);
                parent.removeViewInLayout(this);

                final ViewGroup.LayoutParams layoutParams = getLayoutParams();
                if (layoutParams != null) {
                    parent.addView(view, index, layoutParams);
                } else {
                    parent.addView(view, index);
                }

                mInflatedViewRef = new WeakReference<View>(view);

                if (mInflateListener != null) {
                    mInflateListener.onInflate(this, view);
                }

                return view;
            } else {
                throw new IllegalArgumentException("ViewStub must have a valid layoutResource");
            }
        } else {
            throw new IllegalStateException("ViewStub must have a non-null ViewGroup viewParent");
        }
    
private voidinitialize(android.content.Context context)

        mContext = context;
        setVisibility(GONE);
        setWillNotDraw(true);
    
protected voidonMeasure(int widthMeasureSpec, int heightMeasureSpec)

        setMeasuredDimension(0, 0);
    
public voidsetInflatedId(int inflatedId)
Defines the id taken by the inflated view. If the inflated id is {@link View#NO_ID}, the inflated view keeps its original id.

param
inflatedId A positive integer used to identify the inflated view or {@link #NO_ID} if the inflated view should keep its id.
see
#getInflatedId()
attr
ref android.R.styleable#ViewStub_inflatedId

        mInflatedId = inflatedId;
    
public voidsetLayoutInflater(LayoutInflater inflater)
Set {@link LayoutInflater} to use in {@link #inflate()}, or {@code null} to use the default.

        mInflater = inflater;
    
public voidsetLayoutResource(int layoutResource)
Specifies the layout resource to inflate when this StubbedView becomes visible or invisible or when {@link #inflate()} is invoked. The View created by inflating the layout resource is used to replace this StubbedView in its parent.

param
layoutResource A valid layout resource identifier (different from 0.)
see
#getLayoutResource()
see
#setVisibility(int)
see
#inflate()
attr
ref android.R.styleable#ViewStub_layout

        mLayoutResource = layoutResource;
    
public voidsetOnInflateListener(android.view.ViewStub$OnInflateListener inflateListener)
Specifies the inflate listener to be notified after this ViewStub successfully inflated its layout resource.

param
inflateListener The OnInflateListener to notify of successful inflation.
see
android.view.ViewStub.OnInflateListener

        mInflateListener = inflateListener;
    
public voidsetVisibility(int visibility)
When visibility is set to {@link #VISIBLE} or {@link #INVISIBLE}, {@link #inflate()} is invoked and this StubbedView is replaced in its parent by the inflated layout resource. After that calls to this function are passed through to the inflated view.

param
visibility One of {@link #VISIBLE}, {@link #INVISIBLE}, or {@link #GONE}.
see
#inflate()

        if (mInflatedViewRef != null) {
            View view = mInflatedViewRef.get();
            if (view != null) {
                view.setVisibility(visibility);
            } else {
                throw new IllegalStateException("setVisibility called on un-referenced view");
            }
        } else {
            super.setVisibility(visibility);
            if (visibility == VISIBLE || visibility == INVISIBLE) {
                inflate();
            }
        }