суббота, 18 февраля 2012 г.

Android Training-Улучшение производительности разметок-Загрузка видов по требованию

Иногда ваша разметка может потребовать использования сложных видов, которые используются редко. Когда они представляют собой детали элементов, индикаторы прогресса или сообщения об отмене вы можете уменьшить использование памяти и ускорить рендеринг загружая виды только тогда, когда они понадобятся.
Определение ViewStub.
ViewStub - это легковесный вид без размеров, не отображающийся и не участвующий в разметке. Поэтому его использование незатратно для выполнение inflate и оставления в иерархии видов. Каждый ViewStub просто требует указания атрибута android:layout означающего разметку для inflate.
Следующий ViewStub предназначен для наложения полупрозрачной строки прогресса. Он должен быть видимым только когда новые элементы импортируются в приложение.

<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" />
Загрузка ViewStub разметки.
Когда вы хотите загрузить разметку, указанную в ViewStub, сделайте ее видимой вызовом setVisibility(View.VISIBLE) или сделайте inflate().

((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);
// или
View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();
Примечание: метод inflate() возвращает View сразу по завершению своей работы, поэтому нет необходимости использовать findViewById() для взаимодействия с разметкой.
Сразу после выполнения этих методов элемент ViewStub перестает быть частью иерархии видов. Он заменяется указанной разметкой и ID корневого вида этой разметки является атрибут android:inflatedId ViewStubа. (ID android:id указанный в ViewStub действителен только до вызова этих методов)
Примечание: Недостатком ViewStub является невозможность использования тега <merge/> в разметке.
Оригинальный материал доступен по адресу:

Комментариев нет:

Отправить комментарий