88 lines
3.1 KiB
Plaintext
88 lines
3.1 KiB
Plaintext
page.title=Loading Views On Demand
|
||
parent.title=Improving Layout Performance
|
||
parent.link=index.html
|
||
|
||
trainingnavtop=true
|
||
previous.title=Re-using Layouts with <include/>
|
||
previous.link=reusing-layouts.html
|
||
next.title=Making ListView Scrolling Smooth
|
||
next.link=smooth-scrolling.html
|
||
|
||
@jd:body
|
||
|
||
|
||
<div id="tb-wrapper">
|
||
<div id="tb">
|
||
|
||
<!-- table of contents -->
|
||
<h2>This lesson teaches you to</h2>
|
||
<ol>
|
||
<li><a href="#ViewStub">Define a ViewStub</a></li>
|
||
<li><a href="#Load">Load the ViewStub Layout</a></li>
|
||
</ol>
|
||
|
||
<!-- other docs (NOT javadocs) -->
|
||
<h2>You should also read</h2>
|
||
<ul>
|
||
<li><a href="http://android-developers.blogspot.com/2009/03/android-layout-tricks-3-optimize-with.html"
|
||
>Optimize with stubs (blog post)</a></li>
|
||
</ul>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<p>Sometimes your layout might require complex views that are rarely used. Whether
|
||
they are item details, progress indicators, or undo messages, you can reduce memory usage and speed
|
||
up rendering by loading the views only when they are needed.</p>
|
||
|
||
|
||
<h2 id="ViewStub">Define a ViewStub</h2>
|
||
|
||
<p>{@link android.view.ViewStub} is a lightweight view with no dimension and doesn’t draw anything
|
||
or participate in the layout. As such, it's cheap to inflate and cheap to leave in a view hierarchy.
|
||
Each {@link android.view.ViewStub} simply needs to include the {@code android:layout} attribute to
|
||
specify the layout to inflate.</p>
|
||
|
||
<p>The following {@link android.view.ViewStub} is for a translucent progress bar overlay. It should
|
||
be visible only when new items are being imported into the application.</p>
|
||
|
||
<pre>
|
||
<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" />
|
||
</pre>
|
||
|
||
|
||
<h2 id="Load">Load the ViewStub Layout</h2>
|
||
|
||
<p>When you want to load the layout specified by the {@link android.view.ViewStub}, either set it
|
||
visible by calling {@link android.view.View#setVisibility setVisibility(View.VISIBLE)} or call
|
||
{@link android.view.ViewStub#inflate()}.</p>
|
||
|
||
<pre>
|
||
((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);
|
||
// or
|
||
View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();
|
||
</pre>
|
||
|
||
<p class="note"><strong>Note:</strong> The {@link android.view.ViewStub#inflate()} method returns
|
||
the inflated {@link android.view.View} once complete. so you don't need to call {@link
|
||
android.app.Activity#findViewById findViewById()} if you need to interact with the layout.</p>
|
||
|
||
<p>Once visible/inflated, the {@link android.view.ViewStub} element is no longer part of the view
|
||
hierarchy. It is replaced by the inflated layout and the ID for the root view of that layout is
|
||
the one specified by the {@code android:inflatedId} attribute of the ViewStub. (The ID {@code
|
||
android:id} specified for the {@link android.view.ViewStub} is valid only until the {@link
|
||
android.view.ViewStub} layout is visible/inflated.)</p>
|
||
|
||
<p class="note"><strong>Note:</strong> One drawback of {@link android.view.ViewStub} is that it
|
||
doesn’t currently support the {@code <merge/>} tag in the layouts to be inflated.</p>
|
||
|
||
|
||
|