Показать сообщение отдельно
Старый 06.04.2012, 05:37
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 7  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Специально сделал для Вас
К сожалению, почему-то не выделяется первый элемент во время поиска, спать уже хочу - не вижу причину
Листаются страницы, ищется фраза в каждом айтеме и первый нашедшийся выделяется
Лист сам перематывается к выделенному айтему (ensureIndexIsVisible)
Обратите внимание как при помощи байндинга выводится надпись PAGE 1/3 (выше в коде переменные _pageIndex и _totalPages в тэге [Bindable])
С точки зрения архитектуры код ужасный, но я преследовал цель показать как можно это сделать, не более

Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" 
			   width="350" 
			   height="420"
			   creationComplete="application1_creationCompleteHandler(event)">
 
	<fx:Declarations>
		<s:ArrayCollection id="myData">
			<s:source>
				<fx:Object label="Привет всем" image=""/>
				<fx:Object label="это опять я" image=""/>
				<fx:Object label="Нужно реализвать" image=""/>
				<fx:Object label="менюшку как в" image=""/>
				<fx:Object label="приложении" image=""/>
				<fx:Object label="используй байндинг" image=""/>
				<fx:Object label="кастом рендерер" image=""/>
				<fx:Object label="и скинирование" image=""/>
				<fx:Object label="Я так понял" image=""/>
				<fx:Object label="что рабочую область" image=""/>
				<fx:Object label="нужно разбить на два компонента" image=""/>
				<fx:Object label="и разместить их друг под другом" image=""/>
				<fx:Object label="item13" image=""/>
				<fx:Object label="item14" image=""/>
				<fx:Object label="item15" image=""/>
				<fx:Object label="item16" image=""/>
				<fx:Object label="item17" image=""/>
				<fx:Object label="item22" image=""/>
				<fx:Object label="item34" image=""/>
				<fx:Object label="item3dsbdsbn" image=""/>
				<fx:Object label="sdb" image=""/>
				<fx:Object label="dsfbndsn" image=""/>
				<fx:Object label="dsgndsfgn" image=""/>
				<fx:Object label="gjn rtgn" image=""/>
				<fx:Object label="retjh" image=""/>
				<fx:Object label="dsfn d" image=""/>
				<fx:Object label="dsfgnsdf n" image=""/>
				<fx:Object label="tgjhnrtjn" image=""/>
				<fx:Object label="stgjhnert" image=""/>
				<fx:Object label="y,l" image=""/>
				<fx:Object label="fghmked" image=""/>
				<fx:Object label="sdghn" image=""/>
				<fx:Object label="sdn" image=""/>
				<fx:Object label="FINAL" image=""/>
			</s:source>
		</s:ArrayCollection>
	</fx:Declarations>
 
	<fx:Script>
		<![CDATA[
			import mx.events.FlexEvent;
 
			import spark.events.TextOperationEvent;
 
			[Bindable]
			protected var _pageIndex:int=0;
 
			[Bindable]
			protected var _totalPages:int;
 
			protected function button1_clickHandler(event:MouseEvent):void
			{
				//back
				_pageIndex-=1;
				if(_pageIndex<0)
				{
					_pageIndex=0;
				}
 
				itemsList.scroller.viewport.horizontalScrollPosition=350*_pageIndex;
			}
 
			protected function button2_clickHandler(event:MouseEvent):void
			{
				// forw
				_pageIndex+=1;
				if(_pageIndex>_totalPages-1)
				{
					_pageIndex=_totalPages-1;
				}
				itemsList.scroller.viewport.horizontalScrollPosition=350*_pageIndex;
			}
 
			protected function application1_creationCompleteHandler(event:FlexEvent):void
			{
                                             // расчет количества страниц с округлением в болшую сторону
				_totalPages=Math.round(myData.length/12);
			}
 
			protected function serchTextInput_changeHandler(event:TextOperationEvent):void
			{	
				var firstFoundItemIndex:int=getFirstFoundItemIndex();
 
				// почему-то не выделяется первый item :(
				if(firstFoundItemIndex)
				{
					itemsList.selectedIndex=firstFoundItemIndex;
					itemsList.ensureIndexIsVisible(firstFoundItemIndex);
				}
				else
				{
					itemsList.selectedIndex=-1;
					itemsList.ensureIndexIsVisible(0);
				}
			}
 
			// поиск первого совпадения 
			protected function getFirstFoundItemIndex():int
			{
				var total:int=myData.length;
				var i:int;
 
				var index:int;
 
				for(i=0;i<total;i++)
				{
					if(String(myData.getItemAt(i).label).search(serchTextInput.text)!=-1)
					{
						index=i;
						break
					}
				}
				return index;
			}
		]]>
	</fx:Script>
 
	<s:layout>
		<s:VerticalLayout horizontalAlign="center"/>
	</s:layout>
	<s:List id="itemsList" 
			width="100%" 
			height="350" 
			horizontalScrollPolicy="off"
			verticalScrollPolicy="off"
			borderVisible="false"
			itemRenderer="components.itemRenderers.CustomItemRenderer"
			dataProvider="{myData}">
		<s:layout>
			<s:TileLayout requestedRowCount="7" horizontalGap="0" verticalGap="0" orientation="columns"/>
		</s:layout>
	</s:List>
 
	<s:Group width="80%">
		<s:Button left="5" label="prev" click="button1_clickHandler(event)"/>
		<s:HGroup width="100%"
				  height="100%"
				  horizontalAlign="center"
				  verticalAlign="middle">
			<s:Label text="PAGE {(_pageIndex+1)+'/'+_totalPages} "/>
		</s:HGroup>
		<s:Button right="5" label="next" click="button2_clickHandler(event)"/>
	</s:Group>
 
	<s:TextInput id="serchTextInput" 
				 width="80%"
				 change="serchTextInput_changeHandler(event)"/>
</s:Application>
itemRenderer
Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
				xmlns:s="library://ns.adobe.com/flex/spark" 
				xmlns:mx="library://ns.adobe.com/flex/mx" 
				autoDrawBackground="false"
				width="175"
				height="50"
				mouseEnabled="false">
	<s:states>
		<s:State name="normal"/>
		<s:State name="selected"/>
	</s:states>
 
	<s:Group width="100%" height="100%">
		<s:Rect left="2" 
				right="2" 
				top="2" 
				bottom="2">
			<s:stroke>
				<s:SolidColorStroke color.normal="0xcccccc" color.selected="0xff0000"/>
			</s:stroke>
			<s:fill>
				<s:SolidColor color="0xcccccc" alpha=".3"/>
			</s:fill>
		</s:Rect>
	</s:Group>
 
 
	<s:HGroup width="100%" 
			  height="100%" 
			  horizontalAlign="center" 
			  verticalAlign="middle">
		<s:Label text="{data.label}" textAlign="center" width="175"/>
	</s:HGroup>
</s:ItemRenderer>


Последний раз редактировалось djyamato; 06.04.2012 в 05:47.