This is normal behavior, actually. There are a couple of things that are resulting in multiple calls to
ListView validates twice. This will lead to
update() being called at least twice for each item renderer too.
VerticalLayout used by the
Application needs to validate the
ListView once to get its ideal height measurement. Though you set
100.0, the final calculated height may be affected by the heights of other children in the container. Later, when
percentHeight is used to calculate the final height of the
ListView needs to validate a second time. I suppose that
VerticalLayout could be optimized for the case where only one child is added to the container, but honestly, it's not really that expensive.
ListView will be the only child in the container, you may be able to use a different layout instead of
VerticalLayout in the
Application, if you want to avoid the second validation.
AnchorLayout might be a good choice because it also supports
2) When a scrolling container (such as a
ListView) validates, it needs to measure its content to determine whether scroll bars are required or not. This tends to be more expensive on desktop than on mobile because desktop scroll bars force the content to be resized when they are displayed, while mobile scroll bars are simply displayed on top of the content without resizing it.
Validating a scrolling container basically has two passes. First, to measure the content, which involves determining whether scroll bars are required or not. Then, to apply the final layout based on the scroll bars. Due to certain quirks that I'm not going to dive into right now, it may measure the content twice before applying the final layout. So that's actually three passes. 3 * 2 = 6.
For some reason, the first validation of the
ListView needs an extra measurement and layout. I don't have time to explain exactly why this is happening, but this results in two more calls to
update(). 6 + 2 = 8. (It may be possible for me to optimize away these last 2 updates in a future version of Feathers UI, actually).