2012-01-10 11 views
0

когда я обновляя список искрового вроде этого:искры показывая неполные данные о DataProvider обновлении

searchView.gridView.dataProvider = new ArrayCollection(data); 

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

здесь список кодов из MXML:

<s:List id="gridView" width="1024" height="390" itemRenderer="com.xxx.xxx.view.component.GridViewItemRenderer"> 
    <s:layout> 
     <s:TileLayout rowHeight="195" columnWidth="242" requestedColumnCount="4" horizontalGap="0" verticalGap="0" /> 
    </s:layout> 
</s:List> 

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

UPDATE: похоже, что-то связано с использованием TileLayout. когда я удаляю макет, он всегда отображает все записи.

UPDATE 2: это также происходит, только когда я перехожу из элементов в dataprovider (пустой массив) в n элементов. если есть уже отображаемые элементы, и датапортщик получает обновление с более или менее элементами, он работает.

+0

Как вы заполняете массив? Через удаленный сервис? – LoremIpsum

+0

массив возвращается из службы oneton через вызов функции. массив встроен в вызов функции, но не имеет подключения к удаленной службе. это то, что устанавливает массив данных до установки поставщика данных. Кроме того, счетчик массива всегда корректен. – DasAntonym

+0

попробуйте invalidatedisplaylist() после назначения dataprovider – Exhausted

ответ

1

У меня была та же проблема. Тем не менее, я просто использовал групповую помощь. Если вы это сделаете, он должен показать все.

var myLayout:LayoutBase = gridView.layout; 
gridView.layout = null; 
gridView.layout = myLayout; 

Другой вариант - просто создать новый объект макета и установить его после dataProvider.

var newLayout = new TileLayout(); 
newLayout.rowHeight = 195; 
newLayout.columnWidth = 242; 
newLayout.requestedColumnCount = 4; 
newLayout.horizontalGap = 0; 
newLayout.verticalGap = 0; 

gridView.dataProvider = newDataProvider; 
gridView.layout = newLayout; 
Смежные вопросы