2012-09-03 2 views
0

Я создаю ItemRenderer, чтобы отобразить список рабочих мест, которые компания может захотеть выполнить в здании. Затем пользователь может щелкнуть по заданию, чтобы выбрать его, и использовать кнопки добавления/редактирования/удаления в родительском представлении.Flex Mobile - Highlight Selected Row in Item Renderer

Как бы выделить выбранную HGroup в моем s: ItemRenderer, чтобы пользователь мог видеть, какое задание выбрано в данный момент?

<s:Scroller width="100%" height="70%"> 
     <s:DataGroup width="100%" height="100%" 
        horizontalCenter="0" verticalCenter="0" 
        dataProvider="{Session.EXISTING_JOBS}" 
        > 
      <s:layout > 
       <s:VerticalLayout />     
      </s:layout> 



      <s:itemRenderer> 
       <fx:Component> 
        <s:ItemRenderer verticalCenter="0" horizontalCenter="0" width="100%">         

         <fx:Script> 
          <![CDATA[ 


           protected function jobSelect_clickHandler(event:MouseEvent):void 
           { 
            // highlight the HGroup here 
            if(this.selected == true){ 
             jobRow.setStyle('contentBackgroundColor',0x000000); 
            } else { 
             jobRow.setStyle('contentBackgroundColor',0xFFFFFF); 
            }          
           } 
          ]]> 
         </fx:Script> 


         <s:states> 
          <s:State name="normal"/>        
         </s:states> 
         <s:HGroup id="jobRow" 
          width="100%" height="50" 
            verticalAlign="middle" 
            click="jobSelect_clickHandler(event)" >        
          <s:Label text="{data.id}" 
            width="15%" height="50" 
            verticalAlign="middle" 
            verticalCenter="0"/>  
          <s:Label text="{data.company}" 
            width="35%" height="50" 
            verticalAlign="middle" 
            verticalCenter="0"/> 
          <s:Label text="{data.building}" 
            width="35%" height="50" 
            verticalAlign="middle" 
            verticalCenter="0"/> 
          <s:Label text="{data.assets}" 
            width="15%" height="50" 
            verticalAlign="middle" 
            verticalCenter="0"/>  
         </s:HGroup> 
        </s:ItemRenderer> 
       </fx:Component> 
      </s:itemRenderer> 

     </s:DataGroup> 
    </s:Scroller> 

ответ

1

Предполагая, что вы используете itemRenderer в списке; класс List уже делает это по умолчанию. Вы можете изменить значение, установив selectionColor style.

Если вы действительно хотите изменить значения в HGroup, вы можете использовать стиль contentBackgroundColor. Вы можете указать, является ли ваш текущий рендерер выбранным элементом или нет, обратившись к свойству selected экземпляра itemRenderer.

protected function selectJob_clickHandler(event:MouseEvent):void 
    { 
     // highlight the HGroup here 
     if(this.selected == true){ 
      hgroupID.setStyle('contentBackgroundColor',0x000000); 
     } else { 
      hgroupID.setStyle('contentBackgroundColor',0xFFFFFF); 
     } 
    } 

Не забудьте добавить идентификатор к HGroup:

<s:HGroup id="hgroupID" 
      width="100%" height="50" 
      verticalAlign="middle" 
      click="selectJob_clickHandler(event)" > 
+0

Это не имеет никакого эффекта. Я ничего не теряю при настройке рендеринга элемента? Теперь я переместил его в один файл mxml, чтобы упростить манипулирование данными. Новый код обновлен. –

+0

Мне просто нужно было установить «selected» в true, прежде чем выделять группу. Любая идея о том, как отменить выбор всех остальных одновременно, можно выбрать только один? –

+1

Вы должны убедиться, что ваш itemRenderer отвечает на событие dataChange, чтобы обновить его состояние на основе выбора списка. Это должно обновить состояние, когда выбран элемент и когда элемент не выбран. – JeffryHouser