2015-02-16 3 views
0

У меня есть поля выбора, которые получают значения из файла XML. Когда программа загружается, она автоматически отображает информацию из первого значения в файле XML. Мне также нужно выделить это значение в поле выбора.Как я могу автоматически выделить поле выбора на основе значения из xml?

Вот как это выглядит, когда она изначально загружена enter image description here

Поскольку она автоматически загружаются эти образы, я хочу, что тип, выбранный в окне выбора («By Color» -> «Barnwood») enter image description here

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

  private function onCatReceived(e:ResultEvent):void 
      { 
       var cats:Array= new Array(); 
       loadItems(Globals.compRoot+catDataProvider.lastResult.elements("category")[0].catid); 
       for each(var cat:XML in catDataProvider.lastResult.elements("category")) 
       { 
        if (cats[cat.parent.toString()]) 
        { 
         cats[cat.parent.toString()].addItem(cat); 
        } 
        else 
        { 
         cats[cat.parent.toString()]= new ArrayCollection(); 
         cats[cat.parent.toString()].addItem(cat); 
        } 

       } 
       for (var ct:String in cats) 
       { 
        var cnv:Canvas= new Canvas(); 
        var dataSort:SortField= new SortField("name",true); 
        var nameSort:Sort= new Sort(); 
        nameSort.fields=[dataSort]; 
        var source:ArrayCollection=cats[ct]; 
        source.sort=nameSort; 
        source.refresh(); 
        cnv.label=ct; 
        cnv.horizontalScrollPolicy="off"; 
        cnv.verticalScrollPolicy="off"; 
        var lst:List= new List(); 
        lst.width=166; 
        lst.height=115; 
        lst.labelField="name"; 
        lst.styleName="ControllerList"; 
        lst.addEventListener(ListEvent.CHANGE,changeCat); 

        lst.dataProvider=cats[ct]; 
        Alert.show("ct: " + ct); 
        cnv.addChild(lst); 
        acc.addChild(cnv); 
       } 
       //Maybe add it here?? 
       //mouldingList.items.selectedIndex = 0; 
       var cnv:Canvas = acc.getChildAt(0) as Canvas; 
       var lst:List = cnv.getChildAt(1) as List; 
       Alert.show(lst.toString()); 
       Alert.show(lst.selectedItem.toString()); 

      } 

ответ

0
  • Я изменил способ Аккордеон добавляет ребенок, так что я мог контролировать индекс каждого ребенка
  • Я прошел через каждый Canvas в аккордеоне и установить SelectedIndex аккордеона Списка, если оно соответствует «По Цвет "в качестве метки.

    private function onCatReceived(e:ResultEvent):void 
    { 
        var cats:Array= new Array(); 
        loadItems(Globals.compRoot+catDataProvider.lastResult.elements("category")[0].catid); 
        for each(var cat:XML in catDataProvider.lastResult.elements("category")) 
        { 
         if (cats[cat.parent.toString()]) 
         { 
          cats[cat.parent.toString()].addItem(cat); 
         } 
         else 
         { 
          cats[cat.parent.toString()]= new ArrayCollection(); 
          cats[cat.parent.toString()].addItem(cat); 
         } 
    
        } 
        for (var ct:String in cats) 
        { 
         var cnv:Canvas= new Canvas(); 
         var dataSort:SortField= new SortField("name",true); 
         var nameSort:Sort= new Sort(); 
         nameSort.fields=[dataSort]; 
         var source:ArrayCollection=cats[ct]; 
         source.sort=nameSort; 
         source.refresh(); 
         cnv.label=ct; 
    
         cnv.horizontalScrollPolicy="off"; 
         cnv.verticalScrollPolicy="off"; 
         var lst:List= new List(); 
         lst.width=166; 
         lst.height=115; 
         lst.labelField="name"; 
         lst.styleName="ControllerList"; 
         lst.addEventListener(ListEvent.CHANGE,changeCat); 
    
         lst.dataProvider=cats[ct]; 
         //Alert.show("ct: " + ct); 
         cnv.addChild(lst); 
         acc.addChild(cnv); 
    
         switch (ct) 
         { 
          case "By Color": 
           acc.addChildAt(cnv, 0); 
           break; 
    
          case "By Material": 
           acc.addChildAt(cnv, 1); 
           break; 
    
          case "By Style": 
           acc.addChildAt(cnv, 2); 
           break; 
    
          default: 
           acc.addChild(cnv); 
    
         } 
    
    
         //acc.addChildAt(cnv, 0); 
        } 
    
    
    
        //Set the selected item to be the 0th item 
    
        for each (var o:Object in acc.getChildren()) 
        { 
         if (o is Canvas) 
         { 
          var c:Canvas = o as Canvas; 
          if ("By Color" == c.label) 
          { 
    
           c.setFocus(); //does this work? 
           c.drawFocus(true); //does this work? 
           acc.selectedIndex = 0; //does this work? 
           for each (var o2:Object in o.getChildren()) 
           { 
            if (o2 is List) 
            { 
             var l:List = o2 as List; 
    
    
    
             l.selectedIndex = 0; 
            } 
           } 
          } 
         } 
        } 
    
+0

Да, это здорово. – ketan