Иногда ваша разметка может потребовать использования сложных видов, которые используются редко. Когда они представляют собой детали элементов, индикаторы прогресса или сообщения об отмене вы можете уменьшить использование памяти и ускорить рендеринг загружая виды только тогда, когда они понадобятся.
Определение 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/> в разметке.
Оригинальный материал доступен по адресу:
Комментариев нет:
Отправить комментарий