Flex TileList - начало смещения и обработчик кликов
У меня есть несколько изображений, которые я хотел бы отобразить в TileList во Flex. Мои размеры TileList - 2 столбца по n строк. Что я хочу сделать, это отобразить первый элемент (строка 1, столбец 1) пустым и не активным, и начать отображать мои элементы из строки 1, столбец 2. Возможно ли это?
Мне также интересно, когда я создаю событие click для того же TileList, есть ли способ получить индекс элемента clicked?
Большое спасибо!
м.
1 ответ
Хороший вопрос. Я уверен, что кто-то предложит более элегантное решение, но простым подходом может быть просто добавить нуль к вашему dataProvider в позиции 0 и заставить ваш itemRenderer обрабатывать нуль, отображая какой-то альтернативный контент, или ничего в все.
Для извлечения индекса элемента, по которому щелкнули, есть несколько свойств объектов ListEvent, которые вы можете использовать - event.currentTarget.selectedIndex (или event.currentTarget.selectedIndices, если вы используете множественный выбор), event.columnIndex и.rowIndex или event.itemRenderer, который вы можете использовать в сочетании со свойством itemRendererToIndex элемента TileList, среди прочего.
Вот быстрый и грязный код приложения, демонстрирующий оба этих подхода:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.ListEvent;
import mx.collections.ArrayCollection;
private var dpSource:Array = [
null,
{src: "http://turbonerd.com/media/images/roaming/t/20091017225355.jpg"},
{src: "http://turbonerd.com/media/images/roaming/t/20091017225355.jpg"},
{src: "http://turbonerd.com/media/images/roaming/t/20091017225355.jpg"},
{src: "http://turbonerd.com/media/images/roaming/t/20091017225355.jpg"},
{src: "http://turbonerd.com/media/images/roaming/t/20091017225355.jpg"},
{src: "http://turbonerd.com/media/images/roaming/t/20091017225355.jpg"},
{src: "http://turbonerd.com/media/images/roaming/t/20091017225355.jpg"},
{src: "http://turbonerd.com/media/images/roaming/t/20091017225355.jpg"},
{src: "http://turbonerd.com/media/images/roaming/t/20091017225355.jpg"},
{src: "http://turbonerd.com/media/images/roaming/t/20091017225355.jpg"},
{src: "http://turbonerd.com/media/images/roaming/t/20091017225355.jpg"},
{src: "http://turbonerd.com/media/images/roaming/t/20091017225355.jpg"},
{src: "http://turbonerd.com/media/images/roaming/t/20091017225355.jpg"},
{src: "http://turbonerd.com/media/images/roaming/t/20091017225355.jpg"},
{src: "http://turbonerd.com/media/images/roaming/t/20091017225355.jpg"}
];
[Bindable]
private var dp:ArrayCollection = new ArrayCollection(dpSource);
private function myList_itemClick(event:ListEvent):void
{
Alert.show("You clicked the item at position (" + event.columnIndex + ", " + event.rowIndex + "), which is item " + myList.itemRendererToIndex(event.itemRenderer).toString() + " in the list.");
}
]]>
</mx:Script>
<mx:TileList id="myList" dataProvider="{dp}" itemClick="myList_itemClick(event)">
<mx:itemRenderer>
<mx:Component>
<mx:Canvas>
<mx:Script>
<![CDATA[
override public function set data(value:Object):void
{
super.data = value;
}
]]>
</mx:Script>
<mx:Image source="{data.src}" width="100" height="60" visible="{data != null}" />
<mx:Label text="No item!" visible="{data == null}" />
</mx:Canvas>
</mx:Component>
</mx:itemRenderer>
</mx:TileList>
</mx:Application>
Надеюсь, поможет! Отпишитесь с вопросами, если у вас есть.