Как «спустить» ViewStub? - PullRequest
       56

Как «спустить» ViewStub?

22 голосов
/ 01 октября 2010

Так что я могу накачать ViewStub во время выполнения.Допустим, я хочу, чтобы он исчез, а затем, возможно, снова надулся в зависимости от происходящего события (например, панель инструментов, которая раздувается и сдувается в зависимости от того, что пользователь выбирает на экране).

Я могу использовать View.setVisibility(View.GONE) .... есть ли другой способ?

Или я здесь что-то не так делаю?

Спасибо!:)

Ответы [ 2 ]

33 голосов
/ 02 октября 2010

Надувные макеты могут быть дорогими, особенно на старых устройствах. Думайте о ViewStub как о более ленивом механизме загрузки поддеревьев представления, который может расширяться или не расширяться, а не как способ обмениваться разделами иерархии представления во время выполнения. После накачки нет ничего плохого в переключении между VISIBLE / GONE. GONE заставит каркас пропустить это поддерево во время дорогостоящих обходов.

Это верно, если вам не нужна память, используемая раздутым представлением. Установка видимости GONE не освобождает память вообще; он только помечает вид как ушедший для макета и рисования. Чтобы освободить память о завышенном представлении viewstub, вам фактически придется удалить завышенный вид и снова заменить его новым viewstub для будущего использования.

0 голосов
/ 12 мая 2011

Да, вы можете удалить, когда захотите. Я сделал это только сейчас.

ViewStub stub = findById(...);
View v = stub.inflate();

и установите видимость просмотра для любого события.

v.setVisibility(View.GONE);
...