2013-10-27 2 views
1

У меня есть четыре кнопки внизу моей формы. Нажатие на любую из этих кнопок приводит к подготовке контейнера. В этом контейнере у меня есть пять компонентов (включая кнопки), и этот контейнер может находиться в трех состояниях (изменения при нажатии кнопки, которые находятся внутри контейнера).Перемещение контейнеров или замена компонентов

Под тремя состояниями я подразумеваю каждый раз, когда я нажимаю кнопку, которая добавляется в этот контейнер в качестве компонента, мне нужно заменить несколько/добавить один или два компонента, а затем снова отобразить контейнер.

Теперь я смущен, следует ли мне заменять компоненты, которые находятся внутри контейнера, или я должен создать новый контейнер при каждом нажатии кнопки и поменять весь контейнер.

PS: больше обеспокоен производительностью.

Отношения.

ответ

1

Вы можете добавить и удалить элемент из контейнера с помощью addComponent() и removeComponent(). Это очень похоже на вектор элементов.

я писал о примере для Codename One, где я обменю компоненту в сетке: http://meier-online.com/en/2012/10/codename-one-mirror-grid/ Это должно работать то же самое в LWUIT (за исключением, возможно, анимации)

Я не думаю, что есть много производительностей разница между сменой контейнеров или изменением компонентов внутри них. Для перерисовки макет должен быть пересчитан в обоих случаях, а сам контейнер не имеет такого большого объема памяти (например, изображения). Но вы должны заметить, что у компонента есть метод getParent(), поэтому он должен иметь только одного родителя. Поэтому я бы использовал только один контейнер и заменил элементы.

+1

Это правильный ответ, в то время как ответ jmunoz с помощью метода replace действительно правильно заменяет весь контейнер, он не будет подвержен существенному снижению производительности и даже может быть быстрее, поскольку вы можете выполнить только одну операцию вместо нескольких. –

+0

@Shai Thankyou. – Tirath

1

Вы можете поменять местами компоненты с помощью метода Container под названием replace, где вам нужно только передать новый Component и старый. Вы также можете использовать анимацию или установить ее в значение null.

+0

Спасибо за ваш ответ. Дай мне попробовать снова. Я хочу знать, какой подход более эффективен - например, обмен контейнерами с компонентами в нем или наличие контейнера и замена только компонентов, которые необходимо удалить или добавить в этот контейнер. пожалуйста, дайте мне знать, если нам нужна дополнительная информация здесь. Благодарю. – Tirath

+1

Это более эффективная замена только тех компонентов, которые необходимо удалить, потому что вы уничтожите эти ссылки на память, и приложение будет более эффективным. – Mun0n

+1

очень верно, хорошо работает для меня! –