PDA

Просмотр полной версии : Доступ ко всем дочерним элементам ViewStack (включая неактивные)


insected
26.09.2008, 11:44
Такая ситуация: у меня есть класс MyViewStack extends ViewStack. MyViewStack содержит в себе мои кастом компоненты:

<MyViewStack>
<Canvas>
<myCustomComponent id="0"/>
<Canvas>
<Canvas>
<myCustomComponent id="1"/>
<Canvas>
</MyViewStack>

Когда я щелкаю мышкой по одному из вложенных контролов моего компонента myCustomComponent, то генерится событие и в MyViewStack вызывается обработчик этого события. В этом обработчике нужно сделать следующее:
1. пройтись по всем вложенным коспонентам MyViewStack
2. выбрать из них нужный (а нужны мне myCustomComponent)
3. сделать его selected

Когда я в цикле вызваю у MyViewStack getChildAt(i) я получаю канвасы, причем у того канваса который видим numChildren не равно 0, у всех остальных numChildren==0.
Как то можно получить доступ ко ВСЕМ вложенным элементам всех вложенных элементов MyViewStack ???

wvxvw
26.09.2008, 15:05
Просто предположение... а что показывает rawChildren? Судя по всему дети создаются, когда создается очередной канвас... не уверен, что до этого можно как-то получить их количество...

Да, еще, как вариант, можно сначала канвасу задать creationPolicy = ContainerCreationPolicy.ALL, тогда он по-идее должен сразу создавать детей :) а не когда они будут видны... хотя, ИМО, лучше так не делать, а все таки ждать, когда дети будут созданы, и по мере необходимости с ними работать...

insected
26.09.2008, 16:04
rawChildren показывает numChildren=0 для всех канвасов, кроме активного в данный момент... А чтобы сделать канвас внутри стэка активным достаточно только установить selectedIndex или после этого еще какие то методы нужно вызывать? Это я к тому что можно было бы пройтись по канвасам и делая их селектед искать в них нужный компонент.

insected
26.09.2008, 16:22
И да, я установил у MyViewStack creationPolicy="all" и у всех канвасов создались все дети. А почему лучше так не делать ?

wvxvw
26.09.2008, 18:34
Потому что, представь, что часным случаем контейнера может быть лист / таблица с 10000 (.... много нулей) элементов. Если их взять, и за 1 раз отрендерить - никаких ресурсов не хватит. Конечно, если заранее извесно, что элементов не много, то разницы практически никакой. Но в глобальном плане - лучше рендерить / обрабатывать по мере надобности, это как бы и технологичнее и красивше =)

insected
26.09.2008, 19:15
Ну да, в общем то я согласен, но в моем случае это будет не больше 10 элементов, так что думаю что можно забить ) Спасибо за наводку кстати ;-)

mitado
29.09.2008, 19:13
зачем здесь используются канвасы? можно их удалить.