Мне нужен искровой список, который переключается между VerticalLayout и TileLayout в зависимости от выбора пользователя. Самый очевидный способ — создать два списка с отдельными макетами, а затем использовать состояния и атрибут «includeIn». Однако это не очень хорошее решение, потому что я хотел бы, чтобы при переключении отображались одни и те же элементы (если пользователь прокрутил до элемента 100 в VerticalLayout, а затем переключился на плитку, я бы хотел, чтобы элемент 100 был виден сразу в новый макет вместо того, чтобы начинать с первого элемента).
Поэтому я попытался использовать 2 макета в одном списке и использовать решение «includeIn». Однако я получаю эту ошибку:
"В инициализаторе макета несколько значений инициализатора для целевого типа spark.layouts.supportClasses.LayoutBase."
Вот исходный код, который генерирует эту ошибку, может ли кто-нибудь предложить лучший способ сделать это?
<?xml version="1.0" encoding="utf-8"?>
<s:View
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
public var myAC:ArrayCollection = new ArrayCollection([
"01","02","03","04","05","06","07","08","09","10",
"11","12","13","14","15","16","17","18","19","20",
"21","22","23","24","25","26","27","28","29","30",
"31","32","33","34","35","36","37","38","39","40",
"41","42","43","44","45","46","47","48","49","50"
]);
public function toggleListTileState():void
{
if(currentState=="ListState") currentState = "TileState"
else currentState = "ListState";
}
]]>
</fx:Script>
<s:actionContent>
<s:Button label="tile" label.TileState="list" click="toggleListTileState()"/>
</s:actionContent>
<s:states>
<s:State name="ListState" />
<s:State name="TileState" />
</s:states>
<s:List
id="list"
width="100%"
height="100%"
dataProvider="{myAC}"
>
<s:layout>
<s:VerticalLayout
includeIn="ListState"
horizontalAlign="justify"
useVirtualLayout="true"
/>
<s:TileLayout
includeIn="TileState"
rowHeight="300"
useVirtualLayout="true"
/>
</s:layout>
</s:List>
</s:View>
Спасибо