Подтвердить что ты не робот

Как "сдуть" ViewStub?

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

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

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

Спасибо!:)

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

v.setVisibility(View.GONE);